python提取文件名

发布时间:2019-09-16 07:13:59编辑:auto阅读(1473)

       首先声明本人初涉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…。

       其实到这里我已经想到又一个问题了,如果目录中还有目录肿么办?好吧,明天还要实习上班,今天先洗洗碎了,明天我再好好考虑下。

关键字