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封装对象实现时间效果
Apr 23 Python
跟老齐学Python之赋值,简单也不简单
Sep 24 Python
Python实现按当前日期(年、月、日)创建多级目录的方法
Apr 26 Python
react+django清除浏览器缓存的几种方法小结
Jul 17 Python
Python3 shutil(高级文件操作模块)实例用法总结
Feb 19 Python
Python自动采集微信联系人的实现示例
Feb 28 Python
Python如何安装第三方模块
May 28 Python
在Mac中配置Python虚拟环境过程解析
Jun 22 Python
通过实例简单了解Python sys.argv[]使用方法
Aug 04 Python
Pyinstaller打包Scrapy项目的实现步骤
Sep 22 Python
pycharm永久激活超详细教程
Oct 29 Python
python实现图片,视频人脸识别(dlib版)
Nov 18 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
phpmyadmin出现Cannot start session without errors问题解决方法
2014/08/14 PHP
PHP面试题之文件目录操作
2015/10/15 PHP
PHP模板引擎Smarty中变量的使用方法示例
2016/04/11 PHP
PHP实现生成带背景的图形验证码功能
2016/10/03 PHP
JavaScript 使用技巧精萃(.net html
2009/04/25 Javascript
JavaScript效率调优经验
2009/06/04 Javascript
JavaScript 函数调用规则
2009/09/14 Javascript
JavaScript显示当然日期和时间即年月日星期和时间
2013/10/29 Javascript
js立即执行函数: (function ( ){})( ) 与 (function ( ){}( )) 有什么区别?
2015/11/18 Javascript
JS获取鼠标坐标位置实例分析
2016/01/20 Javascript
JS读写CSS样式的方法汇总
2016/08/16 Javascript
Javascript前端经典的面试题及答案
2017/03/14 Javascript
教你快速搭建Node.Js服务器的方法教程
2017/03/30 Javascript
浅谈js-FCC算法Friendly Date Ranges(详解)
2017/04/10 Javascript
js实现图片上传预览原理分析
2017/07/13 Javascript
使用jQuery实现页面定时弹出广告效果
2017/08/24 jQuery
JavaScript实现焦点进入文本框内关闭输入法的核心代码
2017/09/20 Javascript
在vue项目中使用element-ui的Upload上传组件的示例
2018/02/08 Javascript
详解超简单的react服务器渲染(ssr)入坑指南
2019/02/28 Javascript
生产制造追溯系统之再说条码打印
2019/06/03 Javascript
微信小程序实现身份证取景框拍摄
2020/09/09 Javascript
[02:56]《DAC最前线》之国外战队抵达上海备战亚洲邀请赛
2015/01/28 DOTA
Python pickle类库介绍(对象序列化和反序列化)
2014/11/21 Python
修改Python的pyxmpp2中的主循环使其提高性能
2015/04/24 Python
在Mac上删除自己安装的Python方法
2018/10/29 Python
Python装饰器用法实例分析
2019/01/14 Python
python代码编写计算器小程序
2020/03/30 Python
TensorFlow tensor的拼接实例
2020/01/19 Python
基于matplotlib xticks用法详解
2020/04/16 Python
canvas裁剪clip()函数的具体使用
2018/03/01 HTML / CSS
微软瑞士官方网站:Microsoft瑞士
2018/04/20 全球购物
英国最大的婴儿监视器网上商店:Baby Monitors Direct
2018/04/24 全球购物
妇科医生自荐信
2013/11/05 职场文书
我们的节日春节活动方案
2014/08/22 职场文书
物流管理专业推荐信
2014/09/06 职场文书
uniapp开发打包多端应用完整方法指南
2022/12/24 Javascript