2

python がファイルをディレクトリにコピーするための標準的な方法を提供し、元の主要なディレクトリが追加されているかどうか疑問に思いますcp --parentscpマンページから:

`--parents'
[...]
     cp --parents a/b/c existing_dir

 copies the file `a/b/c' to `existing_dir/a/b/c', creating any
 missing intermediate directories.

shutilこれについて言及しているドキュメントは見たことがありません。もちろん、existing_dir任意のファイルをディレクトリにコピーする前に、ディレクトリ構造全体を directory に作成することもできますが、これを行うのはおそらくオーバーヘッドです。

4

4 に答える 4

2

私は最終的に次のコードを思いつきました。ほぼ同じようにcp --parents動作します。

import os, shutil

def cp_parents(target_dir, files):
    dirs = []
    for file in files:
        dirs.append(os.path.dirname(file))
    dirs.sort(reverse=True)
    for i in range(len(dirs)):
        if not dirs[i] in dirs[i-1]:
            need_dir = os.path.normpath(target_dir + dirs[i])
            print("Creating", need_dir )
            os.makedirs(need_dir)
    for file in files:
        dest = os.path.normpath(target_dir + file)
        print("Copying %s to %s" % (file, dest))
        shutil.copy(file, dest)

次のように呼び出します。

target_dir = '/tmp/dummy'
files = [ '/tmp/dir/file1', '/tmp/dir/subdir/file2', '/tmp/file3' ]

cp_parents(target_dir, files)

出力は次のとおりです。

Creating /tmp/dummy/tmp/dir/subdir
Copying /tmp/dir/file1 to /tmp/dummy/tmp/dir/file1
Copying /tmp/dir/subdir/file2 to /tmp/dummy/tmp/dir/subdir/file2
Copying /tmp/file3 to /tmp/dummy/tmp/file3

おそらくこれを処理するためのより良い方法がありますが、うまくいきます。

于 2013-03-11T14:01:19.483 に答える
0

特定の要件についてはわかりませんが、あなたにぴったりのようshutil.copytreeです。ここで完全なドキュメントを見ることができますが、基本的に例で呼び出す必要があるのは次のようなものです

shutil.copytree( 'a/b/c', 'existing_dir/a/b/c' )
于 2013-03-11T00:28:07.093 に答える