Python扫描并复制文件,读取文件列表复制文件

本文介绍了一个使用Python编写的脚本,能够批量复制和更新文件,适用于项目开发中的文件管理需求。脚本支持三种使用方式:替换已复制的文件、直接复制文件、配置多个复制目录。

因为项目需要,我负责上传文件,昨天整理了一些文件,但是今天又改了下,不想手动一个个复制,于是想用程序解决,从cmd到shell到java,突然想到python应该会有这种小程序,上网搜了下,果然有,“Python扫描并复制文件”。拿来用了下,修了点不适合我环境的bug,然后程序成功运行了,文件也copy过去了。

然后还有个需求,我这边上传文件,同事只是发个文件的相对地址给我,我还是得手动copy,于是修改代码,最后出来的结果是这样的,之前的功能还保留了,用参数控制不同的功能。

代码使用方法已经放在文件头部了。这是我第一次折腾python的代码,之前的经验只是从github上下了个项目pyrailgun,运行里面的demo学习了下。那是个爬虫插件。

总之,感觉还是挺好玩的,有空的话,我还想用nodejs把这个功能实现一下~

# -*- coding: utf-8 -*-
# 第一种用法(替换已经复制了的文件),配置好下面要扫描替换的目录,直接运行 python copyNewToDest.py
# 第二种用法(直接复制文件),配置好SOURCE_PATH2(源目录)和DEST_PATH(目标目录),
	#运行 python copyNewToDest.py copyMobile, copyMobile中放目录中要copy的文件路径,多个文件换行即可
	#除了Application和Public文件夹,其它均需要正确的相对路径
# 第三种用法(配置多个copy目录),配置好对应条件后的代码,运行python copyNewToDest.py copyEasy easy, 最后一个参数值easy代表不同的项目
import os
import shutil
import sys

SOURCE_PATH1=r'C:\Users\jim\Desktop\tzb_mobile\0-wait-to-online';#比对目录,提供文件名
SOURCE_PATH2=r'D:\wamp\apps\mobile';#要复制出来的目录 D:\wamp\apps\mobile
DEST_PATH=r'C:\Users\jim\Desktop\tzb_mobile\0-wait-to-online'#目标目录

if len(sys.argv)==3 and sys.argv[2]=='easy':
	SOURCE_PATH1=r'C:\Users\jim\Desktop\tzb_easypro\0-wait-to-online';#比对目录,提供文件名
	SOURCE_PATH2=r'D:\wamp\apps\tzb_easy';#要复制出来的目录 D:\wamp\apps\mobile
	DEST_PATH=r'C:\Users\jim\Desktop\tzb_easypro\0-wait-to-online'#目标目录

def ReadFileNames(rootDir):
    FileList = []
    for parent,dirNames,fileNames in os.walk(rootDir):
        if fileNames:
            for fileName in fileNames:
                FileList.append(os.path.join(parent,fileName))
    return FileList

#搜索字符串中所有的子字符串,暂未用到
def SearchStr(str,search):
	start = 0
	while True:
		index = str.find(search, start)
		# if search string not found, find() returns -1
		# search is complete, break out of the while loop
		if index == -1:
			break
		print( "%s found at index %d" % (search, index) )
		# move to next possible start position
		start = index + 1

#main()
if len(sys.argv)==1:
	print sys.argv[0]
	if __name__=='__main__':
		if not os.path.exists(DEST_PATH):
			os.makedirs(DEST_PATH)
		fileList = ReadFileNames(SOURCE_PATH1)
		for oldfileName in fileList:
			print oldfileName
			newfileName = oldfileName.replace(SOURCE_PATH1, SOURCE_PATH2)
			destfileName = oldfileName.replace(SOURCE_PATH1, DEST_PATH)
			destdirName =  os.path.dirname(destfileName)
			if not os.path.exists(destdirName):
				os.makedirs(destdirName)
			shutil.copyfile(newfileName,destfileName)
			print 'copy',newfileName,'-->',destfileName
if len(sys.argv)>2 and len(sys.argv[1])>=4:
	if __name__=='__main__':
		print sys.argv[1]
		if not os.path.exists(DEST_PATH):
			os.makedirs(DEST_PATH)
		fileList = file(sys.argv[1]).readlines()
		for oldfileName in fileList:
			oldfileName=oldfileName.strip('\n')
			nPos = oldfileName.find('Application',0)
			if nPos<0:
				nPos = oldfileName.find('Public',0)
			if nPos>0:
				oldfileName = oldfileName[nPos-1:]
			#newfileName = oldfileName.replace(sys.argv[1], SOURCE_PATH2)
			#destfileName = oldfileName.replace(sys.argv[1], DEST_PATH)
			newfileName = SOURCE_PATH2 + oldfileName
			destfileName = DEST_PATH + oldfileName
			destdirName =  os.path.dirname(destfileName)
			if not os.path.exists(destdirName):
				os.makedirs(destdirName)
			shutil.copyfile(newfileName,destfileName)
			print 'copy',newfileName,'-->',destfileName

 

转载于:https://my.oschina.net/jigc/blog/694007

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值