import re
#写上你的文件夹路径
yourdir=""
keywordA = "keywordA"
keywordB = "keywordA(\d+)"
files = [os.path.join(yourdir,f) for f in os.listdir(yourdir)]
with open("out.txt","w") as fo:
for f in files:
fname = os.path.basename(f)
with open(f,"r") as fi:
for line in fi:
if line.strip():
searchA = re.search(keywordA,line.strip())
if searchA:
searchB = re.search(keywordB,line.strip())
if searchB:
print(fname,serachB.groups()[0],sep="\t",file=fo)
编写一个程序,能在当前目录以及当前目录的所有子目录下查找文件名包含指定字符串的文件,并打印出绝对路径。import os
class SearchFile(object):
def __init__(self,path='.'):
self._path=path
self.abspath=os.path.abspath(self._path) # 默认当前目录
def findfile(self,keyword,root):
filelist=[]
for root,dirs,files in os.walk(root):
for name in files:
fitfile=filelist.append(os.path.join(root, name))
#print(fitfile)
print(os.path.join(root, name))
#print(filelist)
print('...........................................')
for i in filelist:
if os.path.isfile(i):
#print(i)
if keyword in os.path.split(i)[1]:
print('yes!',i)# 绝对路径
#else:
#print('......no keyword!')
def __call__(self):
while True:
workpath=input('Do you want to work under the current folder? Y/N:')
if(workpath == ''):
break
if workpath=='y' or workpath=='Y':
root=self.abspath # 把当前工作目录作为工作目录
print('当前工作目录:',root)
dirlist=os.listdir() # 列出工作目录下的文件和目录
print(dirlist)
else:
root=input('please enter the working directory:')
print('当前工作目录:',root)
keyword=input('the keyword you want to find:')
if(keyword==''):
break
self.findfile(keyword,root) # 查找带指定字符的文件
if __name__ == '__main__':
search = SearchFile()
search()
最近在用Python脚本处理文件夹下面的文件名的搜索和重命名。其中碰到如何递归遍历文件夹下面所有的文件,找到需要的文件,并且重命名的问题。其实如果看看Python的document,还是比较简单的,这里直接给出使用方法,免得大家还要花精力去查找。环境:
文件夹结构:
----path1
----path1-1
----path1-1.1.txt
----path1-2
----path1.1.txt
----path2
----recursiveDir.py
文件夹结构如上所示。
代码分析(recursiveDir.py):
[python] view plaincopy
<span style="font-size:18px">import os
'''''
本脚本用来演示如何遍历py脚本所在文件夹下面所有的文件(包括子文件夹以及其中包含的文件)。
重点演示如何获取每个文件的绝对路径。注意os.path.join(dirpath, filename)的用法。
'''
rootdir = os.getcwd()
print('rootdir = ' + rootdir)
for (dirpath, dirnames, filenames) in os.walk(rootdir):
#print('dirpath = ' + dirpath)
for dirname in dirnames:
print('dirname = ' + dirname)
for filename in filenames:
#下面的打印结果类似为:D:\pythonDirDemo\path1\path1-1\path1-1.1.txt
print(os.path.join(dirpath, filename))
if(filename=='path1-1.1.txt'):
os.chdir(dirpath)
#os.rename(os.path.join(dirpath, filename), dirpath + os.sep + 'path1-1.1.new.txt')
os.rename('path1-1.1.txt', 'path1-1.1.new.txt')
#os.remove(os.path.join(dirpath, filename))
#下面的输出为fileName = path1-1.1.txt,并未包含绝对路径,所以需要使用os.path.join来链接,获取绝对路径
print('fileName = ' + filename)
print('------------------one circle end-------------------')</span>
所以可以看到程序中使用os.path.join(dirpath, filename)来拼接出绝对路径出来。注意下面的重命名用法,可以将工作目录切换到os.chdir(dirpath),这样就可以直接用os.rename(oldfile, newfile).Python会自动到dirpath下面查找oldfile并且重命名为newfile。注意工作目录的含义:在Python的GUI中,使用os.getcwd()可以获取到当前工作目录。测试如下:
[html] view plaincopy
<span style="font-size:18px">>>>os.chdir('D:')
>>>os.getcwd()
'D:\\pythonDirDemo\\path1\\path1-1'
>>>os.chdir('D:\\')
>>>os.getcwd()
'D:\\'</span>
可见却是可以用chdir改变工作目录。这个代码只是在重命名的时候用到的小技巧而已,大家知道有这个东西就行了,不过调用chdir之后,后续再获取getcwd()就会被影响,所以警惕。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)