python写一个完整的小程序_Python写的一个收集文件的小程序

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、付费专栏及课程。

余额充值