我終於用下面的代碼上來。它的行爲幾乎與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
有可能是一個更好的方式來處理這個問題,但它的作品。
我覺得這是你發現有此功能的庫的程序自己那種東西。它取決於相對路徑,而'shutil'上的東西不應該爲 – JBernardo 2013-03-11 00:04:38
看看'os'的文檔 - 它聽起來像你想爲路徑模擬一個'mkdir -p',然後將一個文件複製到它? – 2013-03-11 00:42:58
@JonathanVanasco:是的,就是這樣。 – michaelmeyer 2013-03-11 13:52:02