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实现每次处理一个字符的三种方法
Oct 09 Python
Python列表append和+的区别浅析
Feb 02 Python
Python数据结构与算法之列表(链表,linked list)简单实现
Oct 30 Python
pytorch cnn 识别手写的字实现自建图片数据
May 20 Python
python3使用smtplib实现发送邮件功能
May 22 Python
python中itertools模块zip_longest函数详解
Jun 12 Python
获取django框架orm query执行的sql语句实现方法分析
Jun 20 Python
django框架实现模板中获取request 的各种信息示例
Jul 01 Python
Pandas 缺失数据处理的实现
Nov 04 Python
关于Pytorch的MLP模块实现方式
Jan 07 Python
python实现数字炸弹游戏程序
Jul 17 Python
python 多线程中join()的作用
Oct 29 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打造的tab选项卡效果代码(不用js)
2010/12/29 PHP
php 截取字符串并以零补齐str_pad() 函数
2011/05/07 PHP
php在线代理转向代码
2012/05/05 PHP
YiiFramework入门知识点总结(图文教程)
2015/12/28 PHP
Zend Framework教程之Zend_Form组件实现表单提交并显示错误提示的方法
2016/03/21 PHP
PHP实现的一致性Hash算法详解【分布式算法】
2018/03/31 PHP
微信推送功能实现方式图文详解
2019/07/12 PHP
PHP实现简单日历类编写
2020/08/28 PHP
十个优秀的Ajax/Javascript实例网站收集
2010/03/31 Javascript
打开新窗口关闭当前页面不弹出关闭提示js代码
2013/03/18 Javascript
文本有关的样式和jQuery求对象的高宽问题分别说明
2013/08/30 Javascript
关于jquery的多个选择器的使用示例
2013/10/18 Javascript
JavaScript中Cookies的相关使用教程
2015/06/04 Javascript
JavaScript中的Math.LN2属性用法详解
2015/06/12 Javascript
jQuery实现网站添加高亮突出显示效果的方法
2015/06/26 Javascript
详解Document.Cookie
2015/12/25 Javascript
JS组件Bootstrap导航条使用方法详解
2016/04/29 Javascript
详解AngularJS2 Http服务
2017/06/26 Javascript
利用nginx + node在阿里云部署https的步骤详解
2017/12/19 Javascript
Angular ui-roter 和AngularJS 通过 ocLazyLoad 实现动态(懒)加载模块和依赖
2018/11/25 Javascript
Vue使用Element实现增删改查+打包的步骤
2020/11/25 Vue.js
Python实现控制台进度条功能
2016/01/04 Python
Python时间模块datetime、time、calendar的使用方法
2016/01/13 Python
Phantomjs抓取渲染JS后的网页(Python代码)
2016/05/13 Python
python打开windows应用程序的实例
2019/06/28 Python
Python reversed函数及使用方法解析
2020/03/17 Python
Python装饰器的应用场景代码总结
2020/04/10 Python
Visual Studio Code搭建django项目的方法步骤
2020/09/17 Python
英国领先的维生素和营养补充剂直接供应商:Healthspan
2019/04/22 全球购物
竞选班长演讲稿
2013/12/30 职场文书
写给医生的感谢信
2015/01/22 职场文书
创卫工作总结2015
2015/04/22 职场文书
挂职锻炼工作总结2015
2015/05/28 职场文书
国庆节新闻稿
2015/07/17 职场文书
医院保洁员管理制度
2015/08/05 职场文书
canvas绘制折线路径动画实现
2021/05/12 Javascript