python复制文件代码实现


Posted in Python onDecember 23, 2013

主要功能在copyFiles()函数里实现,如下:

def copyFiles(src, dst):
    srcFiles = os.listdir(src)
    dstFiles = dict(map(lambda x:[x, ''], os.listdir(dst)))
    filesCopiedNum = 0    # 对源文件夹中的每个文件若不存在于目的文件夹则复制
    for file in srcFiles:
        src_path = os.path.join(src, file)
        dst_path = os.path.join(dst, file)
        # 若源路径为文件夹,若存在于目标文件夹,则递归调用本函数;否则先创建再递归。
        if os.path.isdir(src_path):
            if not os.path.isdir(dst_path):
                os.makedirs(dst_path)  
            filesCopiedNum += copyFiles(src_path, dst_path)
        # 若源路径为文件,不重复则复制,否则无操作。
        elif os.path.isfile(src_path):                
            if not dstFiles.has_key(file):
                shutil.copyfile(src_path, dst_path)
                filesCopiedNum += 1
    return filesCopiedNum

这里我首先使用os.listdir()函数来遍历源文件夹src和目标文件夹dst,得到两个文件列表,但由于我需要判重操作,因此需要在dst文件列表中进行查询操作。由于列表的查询效率不高,而字典是一个哈希表,查询效率较高,因此我将目标文件列表转换成一个只有键没有值的字典:

dstFiles = dict(map(lambda x:[x, ''], os.listdir(dst)))

然后我遍历源文件列表,若该路径是一个文件夹,先判断该文件夹在目标路径中是否存在,若不存在,则先创建一个新路径。然后递归调用本函数。其实不存在的时候更高效的方法是调用shutil.copytree()函数,但由于此处需要计算拷贝的文件数量,因此就没有调用该函数。

若该路径是一个文件,则首先判断该文件在目标文件夹中是否存在。若不存在,则拷贝。

由于写这个脚本主要是为了同步手机相册到PC,因此只简单地判断一下文件名。若要判断不同名但相同的文件,则可以继续判断一下md5值,这里就不再赘述。

完整代码如下:

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# 输入两个文件夹a和b路径,将a中的文件拷进b,并计算拷贝的文件数。重复的不作处理。
import os
import shutil
def copyFiles(src, dst):
    srcFiles = os.listdir(src)
    dstFiles = dict(map(lambda x:[x, ''], os.listdir(dst)))
    filesCopiedNum = 0
    # 对源文件夹中的每个文件若不存在于目的文件夹则复制
    for file in srcFiles:
        src_path = os.path.join(src, file)
        dst_path = os.path.join(dst, file)
        # 若源路径为文件夹,若存在于目标文件夹,则递归调用本函数;否则先创建再递归。
        if os.path.isdir(src_path):
            if not os.path.isdir(dst_path):
                os.makedirs(dst_path)  
            filesCopiedNum += copyFiles(src_path, dst_path)
        # 若源路径为文件,不重复则复制,否则无操作。
        elif os.path.isfile(src_path):                
            if not dstFiles.has_key(file):
                shutil.copyfile(src_path, dst_path)
                filesCopiedNum += 1
    return filesCopiedNum
def test():
    src_dir = os.path.abspath(raw_input('Please enter the source path: '))
    if not os.path.isdir(src_dir):
        print 'Error: source folder does not exist!'
        return 0
    dst_dir = os.path.abspath(raw_input('Please enter the destination path: '))
    if os.path.isdir(dst_dir):
        num = copyFiles(src_dir, dst_dir)
    else:
        print 'Destination folder does not exist, a new one will be created.'
        os.makedirs(dst_dir)
        num = copyFiles(src_dir, dst_dir)
    print 'Copy complete:', num, 'files copied.'
if __name__ == '__main__':
    test()
Python 相关文章推荐
Python求解平方根的方法
Mar 11 Python
用Python制作简单的朴素基数估计器的教程
Apr 01 Python
Python反射和内置方法重写操作详解
Aug 27 Python
Python二叉树的遍历操作示例【前序遍历,中序遍历,后序遍历,层序遍历】
Dec 24 Python
Django中ORM外键和表的关系详解
May 20 Python
深入浅析Python科学计算库Scipy及安装步骤
Oct 12 Python
基于python3抓取pinpoint应用信息入库
Jan 08 Python
利用Python计算KS的实例详解
Mar 03 Python
Python建造者模式案例运行原理解析
Jun 29 Python
Ubuntu权限不足无法创建文件夹解决方案
Nov 14 Python
解决PyCharm无法使用lxml库的问题(图解)
Dec 22 Python
使用pandas或numpy处理数据中的空值(np.isnan()/pd.isnull())
May 14 Python
python定时采集摄像头图像上传ftp服务器功能实现
Dec 23 #Python
videocapture库制作python视频高速传输程序
Dec 23 #Python
天翼开放平台免费短信验证码接口使用实例
Dec 18 #Python
python模拟登录百度贴吧(百度贴吧登录)实例
Dec 18 #Python
python抓取京东商城手机列表url实例代码
Dec 18 #Python
python获取糗百图片代码实例
Dec 18 #Python
python算法学习之计数排序实例
Dec 18 #Python
You might like
php minixml详解
2008/07/19 PHP
PHP stripos()函数及注意事项的分析
2013/06/08 PHP
php文件上传原理与实现方法详解
2019/12/20 PHP
用脚本调用样式的几种方法
2006/12/09 Javascript
javascript一个无懈可击的实例化XMLHttpRequest的方法
2010/10/13 Javascript
jQuery.validate 常用方法及需要注意的问题
2013/03/20 Javascript
简单易用的倒计时js代码
2014/08/04 Javascript
TypeScript具有的几个不同特质
2015/04/07 Javascript
JS实现屏蔽shift,Ctrl,alt等功能键的方法
2015/06/01 Javascript
javascript文件加载管理简单实现方法
2015/07/25 Javascript
jquery实现Slide Out Navigation滑出式菜单效果代码
2015/09/07 Javascript
jQuery实现图片文字淡入淡出效果
2015/12/21 Javascript
js实现精确到秒的倒计时效果
2016/05/29 Javascript
jQuery动态加载css文件实现方法
2016/06/15 Javascript
JavaScript原生编写《飞机大战坦克》游戏完整实例
2017/01/04 Javascript
在node.js中怎么屏蔽掉favicon.ico的请求
2017/03/01 Javascript
JS 中使用Promise 实现红绿灯实例代码(demo)
2017/10/20 Javascript
使用scrapy实现爬网站例子和实现网络爬虫(蜘蛛)的步骤
2014/01/23 Python
Python通过OpenCV的findContours获取轮廓并切割实例
2018/01/05 Python
Python实现JSON反序列化类对象的示例
2018/01/31 Python
python定时任务 sched模块用法实例
2019/11/04 Python
jupyter notebook参数化运行python方式
2020/04/10 Python
纯CSS3单页切换导航菜单界面设计的简单实现
2016/08/16 HTML / CSS
如何进行有效的自我评价
2013/09/27 职场文书
甜品店的创业计划书范文
2014/01/02 职场文书
《七颗钻石》教学反思
2014/02/28 职场文书
2014教师研修学习体会
2014/07/08 职场文书
公司离职证明范本(汇总)
2014/09/10 职场文书
设备收款委托书范本
2014/10/02 职场文书
技术支持岗位职责
2015/02/13 职场文书
2015年教师节感恩寄语
2015/03/23 职场文书
大学生自荐信怎么写
2015/03/26 职场文书
创作书写之导游词实用技巧分享(干货)
2019/12/20 职场文书
教你使用Pandas直接核算Excel中快递费用
2021/05/12 Python
python内置进制转换函数的操作
2021/06/02 Python
Windows server 2012 NTP时间同步的实现
2022/06/25 Servers