首先声明本人初涉python,由于是自学,而且课余时间比较琐碎,所以打算分主次两条线。主的一条线是看python教程,但是这样实在枯燥,所以又有了次的一条线,就是写一些小程序练练手,只想总结下所得,记录自己学习的历程。
今天写的小程序是提取某文档目录下面的文件名,文档目录里有".txt"".jpg"".bmp"".rm"类型的文件,计划提取后缀名除".rm"以外的文件名并且去后缀,并且存到指定文本文档中,主要涉及到简单的模式匹配和文件操作。
import os
filenames=os.listdir('d:\\test\\')
out=open('names.txt','w')
flag=[]
for name in filenames:
if '.txt'==name[-4:]:
filenames[filenames.index(name)]=name[:-4]
flag.append(True)
elif '.jpg'==name[-4:]:
filenames[filenames.index(name)]=name[:-4]
flag.append(True)
elif '.rm'==name[-3:]:
filenames[filenames.index(name)]=name[:-3]
flag.append(True)
else:
flag.append(False)
continue
for name in filenames:
if flag[filenames.index(name)]:
out.write(name+'\n')
out.close()
2中调用了OS中的函数,新建了filenames列表,存储原始文件名。涉及到路径问题,这里使用的是绝对路径,测试的文档目录在D盘。貌似有getcwd()方法能取得当前目录,但是我一般为了操作方便,还是会自己设置一个好操作的路径。
3中也可以同理把存储的文档设置为指定路径,'w'表示写操作。
4中新建了一个空列表,主要为了之后标记哪些是我们需要的文件名。
第一个循环主要是为了修改filenames列表,通过匹配filenames的每个子元素,需要的就去掉后缀存储到filenames列表,并在相应的flag列表中标记True;不需要的就标记False。这里的filenames.index(name)表示的是name这一项在filenames列表中的下标。name[start:end]则使用的是字符串分片,start和end分别表示起始下标和结束下标。熟悉java或者c应该知道数组中第一项下标为0,这里python是类似的,但是python中同时也规定了最后一项下标为-1,以此向前类推。所以name[-4:]表示的是name后4个字符,然后与我们需要的后缀名进行比对。
接着使用第二个循环结合flag列表进行文档写操作,最后关闭文档。python中比较蛋疼的是没有case语句,所以只能一遍遍使用if…else…。
其实到这里我已经想到又一个问题了,如果目录中还有目录肿么办?好吧,明天还要实习上班,今天先洗洗碎了,明天我再好好考虑下。