2

dir1 と dir2 の 2 つのフォルダーがあります。両方のフォルダー (またはサブフォルダー) にある同じ名前で内容が異なるファイルを見つける必要があります。

のようなもの: so.1.0/p/q/search.c so.1.1/p/q/search.c が異なる

何か案は?

私はこの方法で必要なファイルを取得します:

import os, sys, fnmatch, filecmp

folder1 = sys.argv[1]
folder2 = sys.argv[2]

filelist1 = []

filelist2 = []

for root, dirs, files in os.walk(folder1):
    for filename in fnmatch.filter(files, '*.c'):
         filelist1.append(os.path.join(root, filename))

for root, dirs, files, in os.walk(folder1):
    for filename in fnmatch.filter(files, '*.h'):
        filelist1.append(os.path.join(root, filename))

for root, dirs, files in os.walk(folder2):
    for filename in fnmatch.filter(files, '*.c'):
         filelist2.append(os.path.join(root, filename))

for root, dirs, files, in os.walk(folder2):
    for filename in fnmatch.filter(files, '*.h'):
        filelist2.append(os.path.join(root, filename))

ここで、ファイルの 2 つのリストを比較し、同じファイル名を持つエントリを取得し、内容が異なるかどうかを確認したいと思います。どう思いますか?

4

2 に答える 2

1

@Martijnがトラバース目的で回答したので、使用できますos.walk()

for root, dirs, files in os.walk(path):
    for name in files:

ファイル名の比較には、filecmpをお勧めします

>>> import filecmp
>>> filecmp.cmp('undoc.rst', 'undoc.rst') 
True
>>> filecmp.cmp('undoc.rst', 'index.rst') 
False

ファイルの内容を比較するには、difflibをチェックアウトします

于 2013-07-09T09:46:14.683 に答える