2

我的脚本搜索它所在的目录,并将使用它找到的文件名创建新目录并将它们移动到该目录:John-doe-taxes.hrb -> John-doe/John-does-taxes.hrb。它工作正常,直到它遇到变音字符,然后它将创建目录并返回“错误 2”,表示它找不到文件。我对编程很陌生,我发现的答案是添加一个

coding: 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()
4

2 回答 2

1

要考虑的一件事是使用 Python 3。它默认支持 unicode。我不确定您是否需要做任何事情来更改上述代码中的任何内容才能使其正常工作,但示例中有一个 python 脚本可以将 Python2 代码转换为 Python3。

抱歉,我无法在 Python2 方面为您提供帮助,我遇到了类似的问题,刚刚将我的项目转换到 Python3 ——最终对我来说更容易了!

于 2013-03-18T02:08:01.300 回答
1

我认为您的问题是将strs 传递给os.rename不在系统编码中的。只要文件名仅使用 ascii 字符,这将起作用,但是在该范围之外,您可能会遇到问题。

最好的解决方案可能是使用 unicode。如果您给文件系统函数提供 unicode 参数,则文件系统函数应该返回 unicode 字符串。 open在具有 unicode 文件名的 Windows 上应该可以正常工作。

如果你这样做:

dir = dirname(abspath(unicode(__file__)))

那么你应该在整个过程中使用 unicode 字符串。

于 2013-03-18T05:03:55.657 回答