2017-01-01 13 views
-3

私は異なるディレクトリツリー構造を持つ2つの異なるディレクトリを持っています。ディレクトリAにはディレクトリBにあるファイルがあり、その逆もあります。そのファイルが同じサイズであることを確認して、どのコピーが正しいかを確認します(別の場合は、大きなものを選択します)。これらのファイルは〜1〜2 GBです。さらに、これらのディレクトリには複数のファイルタイプがあり、特定の拡張子を持つファイルと比較したいだけです。Pythonのディレクトリ間で重複名付きファイルのファイルサイズを再帰的に比較する

類似ファイルのファイルサイズを比較し、一致するか一致しないファイルのリストを出力するにはどうすればよいですか?

感謝:)

UPDATE:漠然とした質問に対して申し訳ありませんが、私は、スタックオーバーフロー新たなんです。私はこれ以上いくつか作業し、それを理解することができました。解決策は次のとおりです。このテストでは、file1.txtとfile2.txtの両方を含むtest1 /とtest2 /の2つのdirがあります。 file1.txtは2つのディレクトリ間で同じで、file2.txtは異なっています。

d1_contents = set(os.path.basename(x) for x in glob.glob("/Users/raycharles/Desktop/test1/*.txt")) 
#print d1_contents 

d2_contents = set(os.path.basename(x) for x in glob.glob("/Users/raycharles/Desktop/test2/*.txt")) 
#print d2_contents 

common = list(d1_contents & d2_contents) 

common_files = [ f 
       for f in common 
       if os.path.isfile(os.path.join('/Users/raycharles/Desktop/test1/', f))] 

print 'Common files:', common_files 

# Compare the directories 
match, mismatch, errors = filecmp.cmpfiles('/Users/raycharles/Desktop/test1/', 
              '/Users/raycharles/Desktop/test2/', 
              common_files, shallow=True) 


match = sorted(match) 
mismatch = sorted(mismatch) 
errors = sorted(errors) 

print 'Match:', match 
print "" 
print 'Mismatch:', mismatch 
print "" 
print 'Errors:', errors 
print "" 

そして、これが出力されます。

Common files: ['file1.txt', 'file2.txt'] 
Match: ['file1.txt'] 

Mismatch: ['file2.txt'] 

Errors: [] 
+1

あなたのためにコードを記述していただきたいようです。多くのユーザーは、苦痛を伴うコーダーのコードを作成したいと考えていますが、通常、ポスターがすでに自分で問題を解決しようとしたときにのみ役立ちます。この努力を示す良い方法は、これまでに書いたコード、サンプル入力(もしあれば)、予想される出力、実際に得られる出力(コンソール出力、トレースバックなど)を含めることです。あなたが提供する詳細があれば、受け取る可能性の高い回答が増えます。 [FAQ](http://stackoverflow.com/tour)と[How to Ask](http://stackoverflow.com/help/how-to-ask)を参照してください。 –

答えて

1

ソリューションの概要:

使用os.walk()セットにファイルリストを変換し、各ディレクトリ内のすべてのファイルを検索し、見つけます交差点を設定します。

交差点内の各ファイルについて、サイズをos.stat()(実際には、各コピーに2つのサイズがあります)にします。サイズを比較する。

関連する問題