Python写的一个收集文件的小程序

本文介绍了一个Python脚本,用于批量移动或复制特定类型的文件,并可以根据指定的目录进行筛选。通过使用os.path.walk和shutil模块,脚本能够高效地处理文件操作,适用于自动化文件管理任务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import os
import shutil
import re

class CollectFile:
    def __init__(self, source, dest, types, explict=None):
        self.source = source 
        self.types = tuple(types)
        self.dest = dest
        self.explict = tuple(explict)
        self.explict = '|'.join(explict)
            
    def _move(self, arg, dirname, fnames):
        if re.search(self.explict, dirname):
            return
        for fname in fnames:
            if fname.endswith(self.types):
                src = dirname+'\\'+fname
                shutil.move(src, self.dest) 

    def _copy(self, arg, dirname, fnames):
        if re.search(self.explict, dirname):
            return
        for fname in fnames:
            if fname.endswith(self.types):
                src = dirname+'\\'+fname
                shutil.copy(src, self.dest) 

    def run(self, method):
        if method == 'move':
            os.path.walk(self.source, self._move, None)
        elif method == 'copy':
            os.path.walk(self.source, self._copy, None)
        else:
            raise TypeError('function --run-- parameter wrong')

if __name__ == '__main__':
    print '''
        Collect File program
        Author:p1usj4de
        Notice:Mutiple input split with blank
    '''
    
    source_dir = raw_input('source dir(default d:\\):')
    dest_dir = raw_input('dest dir(default source dir):')
    method = raw_input('you want to \'move\' or \'copy\'(default move)?')
    types = raw_input('types (default movies):')
    explict_dirs = raw_input('explict dirs(default movie,media and lin):')

    if source_dir == '':
        source_dir = 'd:\\'

    if types != '':
        types = types.split(' ')
    else:
        types = ('mp4', 'avi', 'rmvb', 'wmv')

    if dest_dir == '':
        dest_dir = source_dir

    if explict_dirs == '':
        explict_dirs = ('movie','media','lin')
    else:
        explict_dirs = explict_dirs.split(' ')

    if method == '':
        method = 'move'
        
    cf = CollectFile(source_dir, dest_dir, types=types, explict=explict_dirs)
    cf.run(method)


没啥难点的,主要就是调用os.path.walk和shutil模块。其中值得注意的就是shutil.copyfile的dest必须是文件名,而copy的dest可以是文件夹。另外在自定义的文件遍历函数中,def _move(self, arg, dirname, fnames)中dirname是不带最后的斜杠的,也就是说要表达source的话必须写成,dirname+'\\'+fname。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值