gpt4 book ai didi

Python:如何将具有 unicode 文件名的文件移动到 unicode 文件夹

转载 作者:太空狗 更新时间:2023-10-29 21:19:02 24 4
gpt4 key购买 nike

我在 Windows 下的 Python 脚本中在 unicode 命名的文件夹之间移动一个 unicode 命名的文件时遇到了麻烦...

您将使用什么语法来查找文件夹中所有 *.ext 类型的文件并将它们移动到相对位置?

假设文件和文件夹是 unicode。

最佳答案

基本问题是 Unicode 和字节串之间未转换的混合。解决方案可以转换为单一格式或使用一些技巧来避免问题。我所有的解决方案都包括 globshutil 标准库。

例如,我有一些以 ods 结尾的 Unicode 文件名,我想将它们移动到名为 א 的子目录(希伯来文 Aleph,一个 unicode 字符).

第一个解决方案 - 将目录名称表示为字节字符串:

>>> import glob
>>> import shutil
>>> files=glob.glob('*.ods') # List of Byte string file names
>>> for file in files:
... shutil.copy2(file, 'א') # Byte string directory name
...

第二种解决方案 - 将文件名转换为 Unicode:

>>> import glob
>>> import shutil
>>> files=glob.glob(u'*.ods') # List of Unicode file names
>>> for file in files:
... shutil.copy2(file, u'א') # Unicode directory name

归功于 Ezio Melotti,Python bug list .

第三种解决方案——避免目标 Unicode 目录名

虽然在我看来这不是最佳解决方案,但这里有一个值得一提的好技巧。

使用 os.getcwd() 将您的目录更改为目标目录,然后通过将其引用为 将文件复制到该目录。:

# -*- coding: utf-8 -*-
import os
import shutil
import glob

os.chdir('א') # CD to the destination Unicode directory
print os.getcwd() # DEBUG: Make sure you're in the right place
files=glob.glob('../*.ods') # List of Byte string file names
for file in files:
shutil.copy2(file, '.') # Copy each file
# Don't forget to go back to the original directory here, if it matters

更深入的解释

直接的方法 shutil.copy2(src, dest) 失败了,因为 shutil 没有转换就将 unicode 与 ASCII 字符串连接起来:

>>> files=glob.glob('*.ods')
>>> for file in files:
... shutil.copy2(file, u'א')
...
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
File "/usr/lib/python2.6/shutil.py", line 98, in copy2
dst = os.path.join(dst, os.path.basename(src))
File "/usr/lib/python2.6/posixpath.py", line 70, in join
path += '/' + b
UnicodeDecodeError: 'ascii' codec can't decode byte 0xd7 in position 1:
ordinal not in range(128)

如前所述,当使用 'א' 而不是 Unicode u'א' 时可以避免这种情况

这是一个错误吗?

在我看来,这是一个错误,因为 Python 不能期望 basedir 名称总是 str,而不是 unicode。我有 reported this as an issue in the Python buglist ,并等待回复。

进一步阅读

Python's official Unicode HOWTO

关于Python:如何将具有 unicode 文件名的文件移动到 unicode 文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5523373/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com