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

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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# -*- 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