如何改进此python代码。我想在这里添加一个包含所有扩展名的列表,并在列表的帮助下,我想搜索" src"扩展目录并将它们移动到目的地。
import shutil
import glob
import os
dest_dir = "/home/xxxx/Software/"
dest_dir2 = "/home/flyingpizza/Pictures/"
for file in glob.glob(r'/home/xxxxx/Downloads/*.pdf'):
print (file)
shutil.move(file,dest_dir)
for file in glob.glob(r'/home/xxxx/Downloads/*.docx'):
print(file)
shutil.move(file, dest_dir)
for file in glob.glob(r'/home/xxxx/Downloads/*.exe'):
print(file)
shutil.move(file,dest_dir)
for file in glob.glob(r'/home/xxxx/Downloads/*.jpg'):
print(file)
shutil.move(file,dest_dir2)
for file in glob.glob(r'/home/xxxxx/Downloads/*.torrent'):
print(file)
os.remove(file)
答案 0 :(得分:2)
另一种可扩展的解决方案
import os
import shutil
dir1 = "/home/xxxx/Software/"
dir2 = "/home/flyingpizza/Pictures/"
def moveto(dst):
return lambda src: shutil.move(src, dst)
action = {
'pdf': moveto(dir1),
'docx': moveto(dir1),
'exe': moveto(dir1),
'jpg': moveto(dir2),
'torrent': os.remove,
}
src_dir = '/home/xxxxx/Downloads'
for file in os.listdir(src_dir):
ext = os.path.splitext(file)[1][1:]
if ext in action:
action[ext](os.path.join(src_dir, file))
答案 1 :(得分:1)
使用双循环并使用format
生成模式:
for ext in ["docx","pdf","exe","jpg"]:
for file in glob.glob('/home/xxxxx/Downloads/*.{}'.format(ext)):
print (file)
shutil.move(file,dest_dir)
答案 2 :(得分:1)
我会使用位置和扩展名的词典,例如{'/home/xxx/Pictures': ['jpg','png','gif'], ...}
我在哪里使用"键"作为目的地,值是每个目的地的分机列表。
source = '/home/xxx/randomdir/'
mydict = {
'/home/xxx/Pictures': ['jpg','png','gif'],
'/home/xxx/Documents': ['doc','docx','pdf','xls']
}
for destination, extensions in mydict.items():
for ext in extensions:
for file in glob.glob(source + '*.' + ext):
print(file)
shutil.move(file, destination)
虽然Fabre的解决方案很好,但你必须为每个目标文件夹重复他的双循环解决方案,而在这里你有一个三重循环来完成所有事情,只要你给它一个合适的{{ 1}}
另外一条忠告,如果你编写看起来如此重复的代码,就像你的那样,确保有一种方法可以使它更简单,无论是循环还是带参数的函数。