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脚本来获取Google搜索结果的示例
May 04 Python
python获取list下标及其值的简单方法
Sep 12 Python
Python操作csv文件实例详解
Jul 31 Python
Python正则表达式非贪婪、多行匹配功能示例
Aug 08 Python
python按照多个条件排序的方法
Feb 08 Python
Python List cmp()知识点总结
Feb 18 Python
python 并发编程 多路复用IO模型详解
Aug 20 Python
tensorflow 模型权重导出实例
Jan 24 Python
Python常用编译器原理及特点解析
Mar 23 Python
python实现四人制扑克牌游戏
Apr 22 Python
PyCharm中关于安装第三方包的三个建议
Sep 17 Python
如何用Matlab和Python读取Netcdf文件
Feb 19 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用户注册页面利用js进行表单验证具体实例
2013/10/17 PHP
php中文乱码怎么办如何让浏览器自动识别utf-8
2014/01/15 PHP
php文件后缀不强制为.php的实操方法
2019/09/18 PHP
JavaScript入门之对象与JSON详解
2011/10/21 Javascript
通过url查找a元素应用案例
2014/04/29 Javascript
javascript在IE下trim函数无法使用的解决方法
2014/09/12 Javascript
jquery调取json数据实现省市级联的方法
2015/01/29 Javascript
浅谈JavaScript中Date(日期对象),Math对象
2015/02/05 Javascript
值得分享的Bootstrap Ace模板实现菜单和Tab页效果
2015/12/30 Javascript
javascript嵌套函数和在函数内调用外部函数的区别分析
2016/01/31 Javascript
jQuery利用sort对DOM元素进行排序操作
2016/11/07 Javascript
基于JavaScript实现下拉列表左右移动代码
2017/02/07 Javascript
jQuery中.attr()和.data()的区别分析
2017/09/03 jQuery
解决iView中时间控件选择的时间总是少一天的问题
2018/03/15 Javascript
JS引用传递与值传递的区别与用法分析
2018/06/01 Javascript
jquery判断滚动条距离顶部的距离方法
2018/09/05 jQuery
JS数组转字符串实现方法解析
2020/09/04 Javascript
[01:02:54]完美世界DOTA2联赛PWL S2 FTD vs GXR 第一场 11.22
2020/11/26 DOTA
玩转python爬虫之爬取糗事百科段子
2016/02/17 Python
python中日志logging模块的性能及多进程详解
2017/07/18 Python
[原创]教女朋友学Python3(二)简单的输入输出及内置函数查看
2017/11/30 Python
Python 使用with上下文实现计时功能
2018/03/09 Python
PyQt5每天必学之组合框
2018/04/20 Python
python对list中的每个元素进行某种操作的方法
2018/06/29 Python
Python常见数据类型转换操作示例
2019/05/08 Python
python3下载抖音视频的完整代码
2019/06/05 Python
python使用OpenCV模块实现图像的融合示例代码
2020/04/10 Python
tensorflow 2.1.0 安装与实战教程(CASIA FACE v5)
2020/06/30 Python
简单掌握CSS3将文字描边及填充文字颜色的方法
2016/03/07 HTML / CSS
final, finally, finalize的区别
2012/03/01 面试题
上课迟到检讨书100字
2014/01/11 职场文书
党代会心得体会
2014/09/04 职场文书
个人租房协议书范本
2014/09/30 职场文书
毕业生求职自荐信(2016最新版)
2016/01/28 职场文书
python实现进度条的多种实现
2021/04/29 Python
python实现一个简单的贪吃蛇游戏附代码
2022/06/28 Python