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实现的选择排序算法示例
Nov 29 Python
Centos部署django服务nginx+uwsgi的方法
Jan 02 Python
Python的形参和实参使用方式
Dec 24 Python
Python 实现加密过的PDF文件转WORD格式
Feb 04 Python
pycharm安装及如何导入numpy
Apr 03 Python
Django 如何使用日期时间选择器规范用户的时间输入示例代码详解
May 22 Python
Keras中的多分类损失函数用法categorical_crossentropy
Jun 11 Python
3分钟看懂Python后端必须知道的Django的信号机制
Jul 26 Python
Python利用imshow制作自定义渐变填充柱状图(colorbar)
Dec 10 Python
Python+Selenium自动化环境搭建与操作基础详解
Mar 13 Python
python使用shell脚本创建kafka连接器
Apr 29 Python
Python创建SQL数据库流程逐步讲解
Sep 23 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 xml文件操作实现代码(二)
2009/03/20 PHP
PHP中的gzcompress、gzdeflate、gzencode函数详解
2014/07/29 PHP
php实现微信公众平台账号自定义菜单类
2014/12/02 PHP
php堆排序实现原理与应用方法
2015/01/03 PHP
php添加数据到xml文件的简单例子
2016/09/08 PHP
thinkPHP自定义类实现方法详解
2016/11/30 PHP
超级酷和最实用的jQuery实例收集(20个)
2010/04/21 Javascript
基于JQuery的数字改变的动画效果--可用来做计数器
2010/08/11 Javascript
js添加table的行和列 具体实现方法
2013/07/22 Javascript
javascript实现信息的显示和隐藏如注册页面
2013/12/03 Javascript
JQuery中模拟image的ajaxPrefilter与ajaxTransport处理
2015/06/19 Javascript
浅谈javascript中return语句
2015/07/15 Javascript
jquery带动画效果幻灯片特效代码
2015/08/27 Javascript
JavaScript中this详解
2015/09/01 Javascript
JS实现日期时间动态显示的方法
2015/12/07 Javascript
JavaScript中解决多浏览器兼容性23个问题的快速解决方法
2016/05/19 Javascript
EditPlus中的正则表达式 实战(2)
2016/12/15 Javascript
解决vue打包之后静态资源图片失效的问题
2018/02/21 Javascript
Vue3.0结合bootstrap创建多页面应用
2019/05/28 Javascript
JavaScript原型式继承实现方法
2019/11/06 Javascript
Python调用C/C++动态链接库的方法详解
2014/07/22 Python
详解pyenv下使用python matplotlib模块的问题解决
2018/11/29 Python
Python设计模式之简单工厂模式实例详解
2019/01/22 Python
django框架防止XSS注入的方法分析
2019/06/21 Python
Python多进程编程常用方法解析
2020/03/26 Python
h5调用摄像头的实现方法
2016/06/01 HTML / CSS
荷兰最大的儿童服装店:The Kids Republic
2019/04/13 全球购物
Fox Racing官方网站:越野摩托车和山地自行车装备和服装
2019/12/23 全球购物
CHRONEXT英国:您的首选奢华腕表目的地
2020/03/30 全球购物
就业意向书
2014/07/29 职场文书
组工干部对照检查材料
2014/08/25 职场文书
离婚协议书怎么写(范本参考)
2014/09/30 职场文书
大学生个人简历自我评价
2015/03/11 职场文书
Python趣味实战之手把手教你实现举牌小人生成器
2021/06/07 Python
java如何实现获取客户端ip地址的示例代码
2022/04/07 Java/Android
Django框架中表单的用法
2022/06/10 Python