4

あるフォルダ構造から別の構造の別のフォルダにファイルをコピーするスクリプトがあります。

ex. Folder 1
    c.txt
    d.txt
    subdir1
      a.txt
      b.txt

スクリプトは、ファイル/ディレクトリをフォルダー1からフォルダー2(フォルダー2の構造が異なります)にこの形式でコピーします

Folder 2
   subdir2
     c.txt
     d.txt
   subdir1
     a.txt
     b.txt

フォルダ2には、new1.txt、new2.txtなどの独自のファイルを作成できます。新しいファイルを作成すると、フォルダ2の構造は次のようになります。

Folder 2
   new1.txt
   new2.txt
   subdir2
     c.txt
     d.txt
   subdir1
     a.txt
     b.txt

次に、Folder1とFolder2のディレクトリコンテンツを比較する必要があります。ディレクトリの内容を比較するためにfilecmp.dircmpを使用しています。これらの2つのフォルダーのfilecmp.dircmpは、subdir2、subdir2 / c.txt、subdir2 / d.txtを新しいディレクトリとして、新しいファイルをnew1.txtとnew2.txtとして提供します。しかし実際には、new1.txtとnew2.txtを新しいファイルとして作成し、他のファイルは1つのフォルダーから別のフォルダーにコピーしただけです。

新しいファイルとして、結果として必要なのはnew1.txtとnew2.txtだけです。どのように私はそれを行うことができますか。私はこのコードをPythonで書いています

4

1 に答える 1

3

ティムは正しいos.walkです、解決策です:

>>> path = r'D:\DATA\FP12210\My Documents\Temp\Python'
>>> import os
>>> files1 = []
>>> for root, dirs, files in os.walk(os.path.join(path, 'Folder 1')):
    files1.extend(files)


>>> files1
['c.txt', 'd.txt', 'a.txt', 'b.txt']
>>> files2 = []
>>> for root, dirs, files in os.walk(os.path.join(path, 'Folder 2')):
    files2.extend(files)


>>> files2
['new1.txt', 'new2.txt', 'a.txt', 'b.txt', 'c.txt', 'd.txt']

次に、出力を比較できます。

>>> print [f for f in files2 if f not in files1]
['new1.txt', 'new2.txt']
于 2012-07-02T10:50:06.007 に答える