1

ディレクトリ全体とそのファイルをコピーしようとしていましたが、コピーされている各ファイル名も印刷していました。

cp -rf dir destwithの単純な呼び出しを使用していましos.systemたが、明らかなように各ファイル名を個別に印刷することはできません。

os.system次に、再帰的に ls with を呼び出し、文字列全体を保存し、それらを配列に分割し、for ループを実装して os.system("cp " file1 + " des/") を実行し、ファイル名を出力することで、 eash ディレクトリ ファイルを一覧表示することを考えました。 、しかし、それは多くの仕事のように見えます。

これを達成するためのより良いアイデアはありますか?

4

1 に答える 1

4

を使用os.walkしてディレクトリ リスト全体を取得し、そのリストを使用してすべてのファイルを繰り返しコピーできます。何かのようなもの

file_paths = [os.path.join(root, f) for root, _, files in os.walk('.') for f in files]
for path in file_paths:
    print path
    shutil.copy(path, target)

別の方法として、's のコメントに従ってMatthewFranglen実行することもできますshutil.copytree(src, dst)。これにより、物事を無視することもできますが、リスト内包表記で if を使用する代わりに、それを行う関数を定義する必要があります。

# ignore all .DS_Store and *.txt files
file_paths = [os.path.join(root, f) for root, _, files in os.walk('.') for f in files if (f != '.DS_Store') or f.endswith('.txt'))]

に比べ

from shutil import copytree, ignore_patterns
ignore_func = ignore_patterns('.DS_Store', '*.txt')  # ignore .DS_Store and *.txt files
copytree('/path/to/dir/', '/other/dir', ignore=ignore_func)
于 2012-09-24T19:27:21.747 に答える