更新:啊,好的,我看到問題 - shutil.move不會複製到不存在的目錄。要做你想做的事情,你必須首先創建新的目錄樹。因爲它是一個比較安全使用內置的移動功能,而不是推出自己的拷貝和刪除過程中,你可以這樣做:
with open('test_logs.txt','r') as f:
files_to_copy = [line.split()[0] for line in f]
paths_to_copy = set(os.path.split(filename)[0] for filename in files_to_copy)
def ignore_files(path, names, ptc=paths_to_copy):
return [name for name in names if os.path.join(path, name) not in ptc]
shutil.copytree(src, dst, ignore=ignore_files)
for filename in files_to_copy:
output_file="C:" + filename.lstrip("D:")
shutil.move(filename, output_file)
讓我知道,如果不工作
原始帖子:如果你只想移動一些文件,最好的選擇就是使用shutil.copytree
的ignore
關鍵字。假設你的文件列表包括完整路徑和目錄(即['D:\test\test1\test1.txt', 'D:\test\test1\test2.txt', 'D:\test\test1']
),創建一個ignore_files
功能,並使用它像這樣:
files_to_copy = ['D:\test\test1\test1.txt', 'D:\test\test1\test2.txt', 'D:\test\test1']
def ignore_files(path, names, ftc=files_to_copy):
return [name for name in names if os.path.join(path, name) not in ftc]
shutil.copytree(src, dst, ignore=ignore_files)
然後,你可以刪除files_to_copy
文件:
for f in files_to_copy:
try:
os.remove(f)
except OSError: # can't remove() a directory, so pass
pass
我測試這個 - 確保你包含你想要複製的路徑以及files_to_copy
中的文件 - 否則,這將刪除文件而不復制它們。
謝謝米克爾,謝謝sendrele – Illusionist 2011-04-04 03:02:58