我有一个超过150,000个文件的硬盘。我需要能够根据文件的扩展名识别文件,并将文件复制到新目录,同时保持目录结构。
我试过这个:
srcDir ="c:/folder1/d"
dest ="c:/folder1/G"
os.makedirs(dest)
for root, dirs, files in os.walk(srcDir):
for file in files:
if file[-4:].lower() == '.txt':
shutil.copy(os.path.join(root, file), os.path.join(dest, file))
这会将所有.txt文件保存到c:/ arcgis / G,而不是将它们保存在子文件夹中。任何帮助表示赞赏。
答案 0 :(得分:1)
步行中的root
并不总是一样的。如果它进入子目录,它将包含该子目录。由于您不尊重相对于新目的地的更改路径,因此不会维护层次结构。
您可以做的只是将根目录中的源目录替换为目标目录:
for root, dirs, files in os.walk(srcDir):
dRoot = root.replace(srcDir, dest)
os.makedirs(dRoot)
for file in files:
if file[-4:].lower() == '.txt':
shutil.copy(os.path.join(root, file), os.path.join(dRoot, file))