3

我正在尝试遍历目录。下面是代码:

file_list = []
    os.chdir(self.config.Root_Directory_Path())
    for root, dirs, files in os.walk("."):
        file_list.extend( join(root,f) for f in files )
    file_sorted = sorted(file_list)
    f = open(self.config.Client_Local_Status(),'wb')        
    for file in file_sorted:
        print(file + "|" + str(os.path.getmtime(file)) + "\n")            
    f.close()

首先,我遍历树,然后对其进行排序,然后打印。但是我在遍历时收到以下错误。我非常确定该文件存在,但无法找出错误的原因。请帮助我找出错误的原因并修复它。

下面是输出。

输出:

.\Drivers\Intel Drivers\Applications\Software\Applications\Wave_Embassy_Trust_Suite\EMBASSY Security Center\program files\Wave Systems Corp\EMBASSY Security Center\plugins\cpm.scp\webinterface\ru\js\HelpMessages.js|1229488128.0

.\Drivers\Intel Drivers\Applications\Software\Applications\Wave_Embassy_Trust_Suite\EMBASSY Security Center\program files\Wave Systems Corp\EMBASSY Security Center\plugins\cpm.scp\webinterface\ru\js\Strings.js|1229488128.0

成功打印大量文件名后,一个特定文件的代码失败,如下所示:

错误:

Traceback (most recent call last):
  File "C:\SyncClientRK\SyncClientRK.py", line 183, in <module>
    SyncClientRK()
  File "C:\SyncClientRK\SyncClientRK.py", line 17, in __init__
    self.getStatus()
  File "C:\SyncClientRK\SyncClientRK.py", line 38, in getStatus
    self.generateLocalStatus()
  File "C:\SyncClientRK\SyncClientRK.py", line 53, in generateLocalStatus
    print(file + "|" + str(os.path.getmtime(file)) + "\n")
  File "C:\Python33\lib\genericpath.py", line 54, in getmtime
    return os.stat(filename).st_mtime
FileNotFoundError: [WinError 3] The system cannot find the path specified: '.\\Drivers\\Intel Drivers\\Applications\\Software\\Applications\\Wave_Embassy_Trust_Suite\\EMBASSY Security Center\\program files\\Wave Systems Corp\\EMBASSY Security Center\\plugins\\cpm.scp\\webinterface\\zh-CHS\\AccessingToolkit.htm'

请注意,文件是在循环中获取并打印出来的,但是 os.path.getmtime 会抛出一个找不到的错误。无法理解为什么以及如何解决这个问题。

4

2 回答 2

4

这是一个 220 字符长的文件名,从本地目录开始。假设本地目录的路径长度超过 40 个字符,您将达到旧的 Windows 路径长度超过 260 个字符的限制。

并非所有在 Windows 中处理文件的方式都有这个限制,但可能这就是这里的问题。如果您的列表中有更长的文件名,那么这显然不是问题,但这就是我首先要研究的。

另请参阅:http: //msdn.microsoft.com/en-us/library/aa365247%28v=vs.85%29.aspx#maxpath

于 2012-11-16T13:03:41.110 回答
1

文件名中可能有奇怪的字符?显然os.walk会返回您以后无法访问的内容;这不应该发生,但它确实发生了。必须是古怪的东西,可能与 Windows 文件系统、文件名处理等有关。当它不存在时打印名称,使用repr(file_name),看看你是否能在里面找到奇怪的字符。更有可能是其他东西在摆弄,但这是我目前最好的猜测。

于 2012-11-16T13:38:19.310 回答