我的脚本搜索它所在的目录,并使用它找到的文件名创建新目录,并将它们移动到该目录:John-doe-taxes.hrb -> John-doe/John-does-taxes。 hrb。它工作正常,直到遇到变音字符,然后它将创建目录并返回“错误 2”,表示找不到该文件。我对编程相当陌生,我找到的答案是添加
编码:utf-8
行到不起作用的文件我相信因为我没有在我的代码中使用元音变音我正在处理元音变音文件。我很好奇的一件事是,这个问题是否只发生在变音符号或其他特殊字符上?这是我正在使用的代码,感谢您提供的任何建议。
import os
import re
from os.path import dirname, abspath, join
dir = dirname(abspath(__file__))
(root, dirs, files) = os.walk(dir).next()
p = re.compile('(.*)-taxes-')
count = 0
for file in files:
match = p.search(file)
if match:
count = count + 1
print("Files processed: " + str(count))
dir_name = match.group(1)
full_dir = join(dir, dir_name)
if not os.access(full_dir, os.F_OK):
os.mkdir(full_dir)
os.rename(join(dir, file), join(full_dir, file))
raw_input()
最佳答案
我认为您的问题是将 str
传递给不在系统编码中的 os.rename
。只要文件名仅使用 ascii 字符,这就可以工作,但是超出该范围,您可能会遇到问题。
最好的解决方案可能是使用 unicode。如果给文件系统函数提供 unicode 参数,它们应该返回 unicode 字符串。 open
应该可以在使用 unicode 文件名的 Windows 上正常工作。
如果你这样做:
dir = dirname(abspath(unicode(__file__)))
那么您应该全程使用 unicode 字符串。
关于Python。如果文件名中包含特殊字符,则尝试使用文件名创建新目录时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15468709/