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的发展史
Sep 26 Python
人机交互程序 python实现人机对话
Nov 14 Python
Python实现改变与矩形橡胶的线条的颜色代码示例
Jan 05 Python
Python微信公众号开发平台
Jan 25 Python
python简单实现操作Mysql数据库
Jan 29 Python
Python 一句话生成字母表的方法
Jan 02 Python
python字符串替换re.sub()方法解析
Sep 18 Python
python中如何设置代码自动提示
Jul 15 Python
Django如何实现密码错误报错提醒
Sep 04 Python
Numpy(Pandas)删除全为零的列的方法
Sep 11 Python
Python 列表推导式需要注意的地方
Oct 23 Python
pycharm 实现光标快速移动到括号外或行尾的操作
Feb 05 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执行.SQL文件
2013/07/05 PHP
thinkphp实现多语言功能(语言包)
2014/03/04 PHP
Laravel基础-关于引入公共文件的两种方式
2019/10/18 PHP
动态加载js和css(外部文件)
2013/04/17 Javascript
JS截取字符串常用方法整理及使用示例
2013/10/18 Javascript
利用try-catch判断变量是已声明未声明还是未赋值
2014/03/12 Javascript
js隐式全局变量造成的bug示例代码
2014/04/22 Javascript
JavaScript中使用arguments获得函数传参个数实例
2014/08/27 Javascript
贴近用户体验的Jquery日期、时间选择插件
2015/08/19 Javascript
基于JavaScript实现表单密码的隐藏和显示出来
2016/03/02 Javascript
JS定时器用法分析【时钟与菜单中的应用】
2016/12/21 Javascript
jQuery密码强度验证控件使用详解
2017/01/05 Javascript
jQuery绑定事件方法及区别(bind,click,on,live,one)
2017/08/14 jQuery
Vue的路由动态重定向和导航守卫实例
2018/03/17 Javascript
javascript匿名函数中的'return function()'作用
2018/10/15 Javascript
JavaScript 严格模式(use strict)用法实例分析
2020/03/04 Javascript
JavaScript设计模式之观察者模式与发布订阅模式详解
2020/05/07 Javascript
Python Tkinter基础控件用法
2014/09/03 Python
Python数据可视化编程通过Matplotlib创建散点图代码示例
2017/12/09 Python
python中使用print输出中文的方法
2018/07/16 Python
Python对CSV、Excel、txt、dat文件的处理
2018/09/18 Python
对Python实现简单的API接口实例讲解
2018/12/10 Python
pandas DataFrame 警告(SettingWithCopyWarning)的解决
2019/07/23 Python
jupyter notebook 使用过程中python莫名崩溃的原因及解决方式
2020/04/10 Python
Python 通过正则表达式快速获取电影的下载地址
2020/08/17 Python
python在地图上画比例的实例详解
2020/11/13 Python
python利用文件时间批量重命名照片和视频
2021/02/09 Python
用HTML5制作一个简单的弹力球游戏
2015/05/12 HTML / CSS
美国著名珠宝品牌之一:Jared The Galleria Of Jewelry
2016/10/01 全球购物
瑞士灯具购物网站:Lampenwelt.ch
2018/07/08 全球购物
StringBuilder和String的区别
2015/05/18 面试题
函授大专自我鉴定
2013/11/01 职场文书
社会保险接收函
2014/01/12 职场文书
法学专业自我鉴定
2014/02/05 职场文书
2016年教师政治思想表现评语
2015/12/02 职场文书
golang中切片copy复制和等号复制的区别介绍
2021/04/27 Golang