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

多くのファイル名を正常に出力した後、以下に示すように、特定の 1 つのファイルでコードが失敗します。

エラー:

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文字より長いと仮定すると、260文字より長いパスの古いWindows制限に達しています。

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 に答える