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中操作列表之list.extend()方法的使用
May 20 Python
python获取元素在数组中索引号的方法
Jul 15 Python
python 采集中文乱码问题的完美解决方法
Sep 27 Python
python安装pywin32clipboard的操作方法
Jan 24 Python
Python基础教程之if判断,while循环,循环嵌套
Apr 25 Python
Win10下python 2.7与python 3.7双环境安装教程图解
Oct 12 Python
Pycharm最常用的快捷键及使用技巧
Mar 05 Python
django xadmin action兼容自定义model权限教程
Mar 30 Python
TensorFlow打印输出tensor的值
Apr 19 Python
详解pyqt5的UI中嵌入matplotlib图形并实时刷新(挖坑和填坑)
Aug 07 Python
pyx文件 生成pyd 文件用于 cython调用的实现
Mar 04 Python
python本地文件服务器实例教程
May 02 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出现Cannot modify header information问题的解决方法大全
2008/04/09 PHP
一个简洁的PHP可逆加密函数(分享)
2013/06/06 PHP
thinkPHP5.0框架配置格式、加载解析与读取方法
2017/03/17 PHP
Laravel 实现密码重置功能
2018/02/23 PHP
CI框架实现创建自定义类库的方法
2018/12/25 PHP
类似GMAIL的Ajax信息反馈显示
2010/02/16 Javascript
Jquery实现搜索框提示功能示例代码
2013/08/13 Javascript
js读取cookie方法总结
2014/10/31 Javascript
javascript中indexOf技术详解
2015/05/07 Javascript
jQuery实现导航滚动到指定内容效果完整实例【附demo源码下载】
2016/09/20 Javascript
详解Webstorm 新建.vue文件支持高亮vue语法和es6语法
2017/10/26 Javascript
Vue2.0设置全局样式(less/sass和css)
2017/11/18 Javascript
解决js相同的正则多次调用test()返回的值却不同的问题
2018/10/10 Javascript
python实现得到一个给定类的虚函数
2014/09/28 Python
Python有序字典简单实现方法示例
2017/09/28 Python
深入浅析Python中的yield关键字
2018/01/24 Python
Python实现正整数分解质因数操作示例
2018/08/01 Python
python正向最大匹配分词和逆向最大匹配分词的实例
2018/11/14 Python
Python简单过滤字母和数字的方法小结
2019/01/09 Python
win10安装tensorflow-gpu1.8.0详细完整步骤
2020/01/20 Python
python使用PIL剪切和拼接图片
2020/03/23 Python
Ubuntu18.04安装 PyCharm并使用 Anaconda 管理的Python环境
2020/04/08 Python
keras之权重初始化方式
2020/05/21 Python
手把手教你配置JupyterLab 环境的实现
2021/02/02 Python
CSS3实现淘宝留白的方法
2020/06/05 HTML / CSS
基于html5 canvas实现漫天飞雪效果实例
2014/09/10 HTML / CSS
中东地区最大的奢侈品市场:The Luxury Closet
2019/04/09 全球购物
SOA面试题:如何在SOA中实现松耦合
2013/07/21 面试题
办公室主任职责范文
2013/11/08 职场文书
高中毕业生个人自我鉴定
2013/11/24 职场文书
办公室文员工作职责
2014/01/31 职场文书
保密工作承诺书
2014/08/29 职场文书
学校总务处领导班子民主生活会对照检查材料思想汇报
2014/09/27 职场文书
功夫熊猫观后感
2015/06/10 职场文书
java基础——多线程
2021/07/03 Java/Android
RestTemplate如何通过HTTP Basic Auth认证示例说明
2022/03/17 Java/Android