3

システム上のディレクトリをクロールし、ファイルのメタデータを記録するスクリプトを作成しました。これを行うためにos.walkを使用しました。

ほとんどの部分で機能しましたが、異なるマシンで実行すると、異なるファイルのリストが返されます。

現在、Dropboxフォルダーでテストしています。私のMBPro(lion)では、フォルダーをクロールし、正しい数のファイルを返します。私のiMac(マウンテンライオン)では、通常は実行ごとに1〜3個のファイルをスキップしません。追加のクロールはストラグラーをピックアップしますが、通常はディレクトリ内のいくつかのファイルを無視し続けます。

コードの短いスニペットは次のとおりです。

directory = '/Users/user/Dropbox/'
for dirname, dirnames, filenames in os.walk(directory):
  for subdirname in dirnames:
    for filename in filenames:
      if os.path.isfile(filename):
        # collect file info using os.path and os.stat

私は明らかにディレクトリを無視したいです。これを行うためのより良い方法はありますか?できれば、OSにとらわれないものが望ましい。

4

1 に答える 1

2

トリックは@MartijnPietersが提案したようなものです。サブディレクトリもループの次の反復で取得されるため、ループする必要はありません。これが私の2台のマシン間の不一致の原因でした。

また、OSXには、特定のディレクトリ内のファイルを計算する非常に奇妙な方法があることに注意することが重要です。これは、特定のディレクトリでdfを実行し、「Get Info」を実行して、結果を比較することで確認できます。

directory = '/Users/user/Dropbox/'
for dirname, dirnames, filenames in os.walk(directory):
    for filename in filenames:
        if os.path.isfile(filename):
            # collect file info using os.path and os.stat'   
于 2013-01-14T18:41:26.747 に答える