python基于扩展名移动文件?

时间:2017-07-17 05:19:16

标签: python python-2.7

如何改进此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)

3 个答案:

答案 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}}

另外一条忠告,如果你编写看起来如此重复的代码,就像你的那样,确保有一种方法可以使它更简单,无论是循环还是带参数的函数。