Python比较文件夹比另一同名文件夹多出的文件并复制出来的方法


Posted in Python onMarch 05, 2015

本文实例讲述了Python比较文件夹比另一同名文件夹多出的文件并复制出来的方法。分享给大家供大家参考。具体如下:

这个东东本来是做来给公司数据同步用的:新服务器还没正式启用,旧的服务器还在使用,每天都有大量图片传到旧服务器上面,为了避免备份全部图片,所以写了这么个工具。

1. 运行效果如下图所示:

Python比较文件夹比另一同名文件夹多出的文件并复制出来的方法

2. Python代码如下:    

# coding=gbk

'''

Created on 2011-1-7

@author: HH

'''

import os,ConfigParser

'''

递归列出某目录下的文件,放入List中

'''

def listDir (fileList,path):

    files=os.listdir(path)

    for i in  files:

        file_path=path+"\\"+i

        if os.path.isfile(file_path):

            fileList.append(file_path)

    for i in files:

        file_path=path+"\\"+i

        if os.path.isdir(file_path):

            #fileList.append(file_path)

            listDir(fileList,file_path)

    return fileList

'''

将List中内容写入文件

'''

def writeListToFile(list,path):

    strs="\n".join(list)

    f=open(path,'wb')

    f.write(strs)

    f.close()

'''

读入文件内容并放入List中

'''

def readFileToList(path):

    lists=[]

    f=open(path,'rb')

    lines=f.readlines()

    for line in lines:

        lists.append(line.strip())

    f.close()

    return lists

'''

比较文件--以Set方式

'''

def compList(list1,list2):

    return list(set(list1)-set(list2))

'''

复制List中文件到指定位置

'''

def copyFiles(fileList,targetDir):

    for file in fileList:

        targetPath=os.path.join(targetDir,os.path.dirname(file))

        targetFile=os.path.join(targetDir,file)

        if not os.path.exists(targetPath):

            os.makedirs(targetPath)

        if not os.path.exists(targetFile) or (os.path.exists(targetFile) and os.path.getsize(targetFile)!=os.path.getsize(file)):

            print "正在复制文件:"+file

            open(targetFile,'wb').write(open(file,'rb').read())

        else:

            print "文件已存在,不复制!"

if __name__ == '__main__':

    path=".svn"

    #获取源目录

    txtFile="1.txt"

    #目录结构输出的目的文件

    tdir="cpfile"

    #复制到的目标目录

    cfFile="config.ini";

    #配置文件文件名

    fileList=[]

    #读取配置文件

    if(os.path.exists(cfFile)):

        cf=ConfigParser.ConfigParser()

        cf.read(cfFile)

        path=cf.get("main", "sourceDir")

        txtFile=cf.get("main","txtFile")

        tdir=cf.get("main","targetDir")

    else:

        print "配置文件不存在!"

        raw_input("\n按 回车键 退出\n")

        exit()

    if(os.path.exists(txtFile)):

        #如果导出的文件存在,就读取后比较

        list1=readFileToList(txtFile)

        print "正在读取文件列表……"

        fileList=listDir (fileList,path)

        print "正在比较文件……"

        list_res=compList(fileList,list1)

        if len(list_res)>0:

            print "以下是原目录中不存在的文件:\n"

            print "\n".join(list_res)

            print "\n共计文件数:"+str(len(list_res))+"\n"

            if raw_input("\n是否复制文件?(y/n)")!='n':

                copyFiles(list_res,tdir)

        else:

            print "没有不相同的文件!"

    else:

        #如果导出的文件不存在,则导出文件

        print "正在读取文件列表……"

        fileList=listDir (fileList,path)

        writeListToFile(fileList,txtFile)

        print "已保存到文件:"+txtFile

    raw_input("\n按 回车键 退出\n")

3. 配置文件名:config.ini如下:
#配置文件名:config.ini

[main]

sourceDir=wwwroot

txtFile=1.txt

targetDir=cp

希望本文所述对大家的Python程序设计有所帮助。

Python 相关文章推荐
Python多线程实例教程
Sep 06 Python
对Python的Django框架中的项目进行单元测试的方法
Apr 11 Python
Python常用的内置序列结构(列表、元组、字典)学习笔记
Jul 08 Python
python+django快速实现文件上传
Oct 24 Python
Python利用heapq实现一个优先级队列的方法
Feb 03 Python
python3.6 tkinter实现屏保小程序
Jul 30 Python
Python 模拟动态产生字母验证码图片功能
Dec 24 Python
python 利用已有Ner模型进行数据清洗合并代码
Dec 24 Python
Python并发concurrent.futures和asyncio实例
May 04 Python
python爬虫基础知识点整理
Jun 02 Python
基于Django快速集成Echarts代码示例
Dec 01 Python
举例讲解Python装饰器
Dec 24 Python
Python挑选文件夹里宽大于300图片的方法
Mar 05 #Python
python基于windows平台锁定键盘输入的方法
Mar 05 #Python
Python格式化压缩后的JS文件的方法
Mar 05 #Python
Python随机生成彩票号码的方法
Mar 05 #Python
Windows下安装python2.7及科学计算套装
Mar 05 #Python
Python可跨平台实现获取按键的方法
Mar 05 #Python
Python读取mp3中ID3信息的方法
Mar 05 #Python
You might like
全国FM电台频率大全 - 18 湖南省
2020/03/11 无线电
php curl基本操作详解
2013/07/23 PHP
php支持中文字符串分割的函数
2015/05/28 PHP
全面解析PHP面向对象的三大特征
2017/06/10 PHP
PHP实现验证码校验功能
2017/11/16 PHP
jQuery拖拽 & 弹出层 介绍与示例
2013/12/27 Javascript
javascript将浮点数转换成整数的三个方法
2014/06/23 Javascript
JS实现的论坛Ajax打分效果完整实例
2015/10/31 Javascript
学习JavaScript设计模式(单例模式)
2015/11/26 Javascript
JavaScript的removeChild()函数用法详解
2015/12/27 Javascript
使用微信内嵌H5网页解决JS倒计时失效问题
2017/01/13 Javascript
jQuery使用方法
2017/02/04 Javascript
Bootstrap栅格系统使用方法及页面调整变形的解决方法
2017/03/10 Javascript
纯JavaScript实现实时反馈系统时间
2017/10/26 Javascript
微信小程序promsie.all和promise顺序执行
2017/10/27 Javascript
浅谈Emergence.js 检测元素可见性的 js 插件
2017/11/18 Javascript
vue-router3.0版本中 router.push 不能刷新页面的问题
2018/05/10 Javascript
从零开始用electron手撸一个截屏工具的示例代码
2018/10/10 Javascript
antdesign-vue结合sortablejs实现两个table相互拖拽排序功能
2021/01/08 Vue.js
[05:08]第一届“网鱼杯”DOTA2比赛精彩集锦
2014/09/05 DOTA
[00:36]DOTA2上海特级锦标赛 LGD战队宣传片
2016/03/04 DOTA
[01:59]游戏“zheng”当时试玩会
2019/08/21 DOTA
django通过ajax发起请求返回JSON格式数据的方法
2015/06/04 Python
Python正则表达式使用经典实例
2016/06/21 Python
python如何在循环引用中管理内存
2018/03/20 Python
学习Django知识点分享
2019/09/11 Python
django 简单实现登录验证给你
2019/11/06 Python
win10安装python3.6的常见问题
2020/07/01 Python
Asics日本官网:鬼冢八喜郎创立的跑鞋运动品牌
2017/10/18 全球购物
以工厂直接定价的传奇性能:Ben Hogan Golf
2019/01/04 全球购物
乌克兰数字设备、配件和智能技术的连锁商店:KTC
2020/08/18 全球购物
青年志愿者事迹材料
2014/02/07 职场文书
十佳中学生事迹材料
2014/06/02 职场文书
2016公司中秋节寄语
2015/12/07 职场文书
Python开发之QT解决无边框界面拖动卡屏问题(附带源码)
2021/05/27 Python
Java Dubbo框架知识点梳理
2021/06/26 Java/Android