我有文件我想根据文件名移动到不同的文件夹。 文件名的示例是:
296_A_H_1_1_20070405.pdf
296_A_H_10_1_20070405.pdf
296_A_H_2_1_20070405.pdf
296_A_H_20_1_20070405.pdf
相应的文件夹名称为:
296_A_H_1
296_A_H_2
296_A_H_10
296_A_H_20
我想根据文件名将文件移动到正确的文件夹中。例如, 296_A_H_1 _1_20070405.pdf应该位于 296_A_H_1 文件夹中。这是我到目前为止的代码:
import shutil
import os
#filepath to files
source = 'C:\\Users\\Desktop\\test folder'
#filepath to destination folders
dest1 = 'C:\\Users\\Desktop\\move file\\296_A_H_1'
dest2 = 'C:\\Users\\Desktop\\move file\\296_A_H_2'
dest3 = 'C:\\Users\\Desktop\\move file\\296_A_H_10'
dest4 = 'C:\\Users\\Desktop\\move file\\296_A_H_20'
files = [os.path.join(source, f) for f in os.listdir(source)]
#move files to destination folders based on file path and name
for f in files:
if (f.startswith("C:\\Users\\Desktop\\test folder\\296_A_H_1_")):
shutil.copy(f,dest1)
elif (f.startswith("C:\\Users\\Desktop\\test folder\\296_A_H_2_")):
shutil.copy(f,dest2)
elif (f.startswith("C:\\Users\\Desktop\\test folder\\296_A_H_10")):
shutil.copy(f, dest3)
elif (f.startswith("C:\\Users\\Desktop\\test folder\\296_A_H_20")):
shutil.copy(f, dest4)
此代码有效但我需要将400个文件移动到不同的文件夹,并且必须编写数百个elif语句。如何通过将文件名与目标文件夹匹配并使用shutil将文件复制到该文件夹来完成此操作?我刚刚开始学习Python,所以任何帮助都将非常感谢!
答案 0 :(得分:1)
这个怎么样?您基本上使用字符串成员资格测试(即if d in x
)将目标映射到应该到达这些目的地的文件。这当然假设要移动的所有文件都从source
文件夹开始,并且所有目标都在同一文件夹中('C:\\Users\\Desktop\\move file'
)。
source = 'C:\\Users\\Desktop\\test folder'
dests = os.listdir('C:\\Users\\Desktop\\move file')
# Map each destination to the files that should go to that destination
dest_file_mapping = {d: {os.path.join(source, x
for x in os.listdir(source) if d in x} for d in dests}
for dest, files in dest_file_mapping.items():
for f in files:
shutil.copy(f, dest)