⽂件夹提取特定⽂件名的。。。
批量处理⽂件时,常需要先遍历某个路径提取特定条件的⽂件名。这篇写⼀个暴⼒遍历但很简洁的⽅法,真的⾮常简洁但是⾮常暴⼒。
例⼦⽬标是:获得存放遥感数据的⽂件夹下⽂件夹名以“_BAD”结尾的⽂件夹内容。因为该⽂件下分级很多(年/⽉/产品类型/),⽬标⽂件夹很多且存在在最后⼀级,⼿动查看很烦。
代码如下(知识点总结代码后):
# -*- coding: utf-8 -*-
"""
遍历某路径下所有⽂件夹,获得特定⽂件夹下所有⽂件
很暴⼒,真的遍历了所有的⽂件夹
20180124
@author: 墨⼤宝
"""
import os
TARGETPATH = r'F:\MODIS_DATA'
文件名提取records = []
for currentDir, _, includedFiles in os.walk(TARGETPATH):
if dswith('_BAD'): continue
else:
records.append(currentDir) # 将以“_BAD”结尾的⽂件夹名加⼊records
# 将records写⼊.txt
txtFile = open(os.path.join(TARGETPATH, '02_'), 'w')
txtFile.write(os.linesep.join(records))
txtFile.close()
# 将排序后的records写⼊.txt
with open(os.path.join(TARGETPATH, '02_04_'), 'w') as txtFile:
txtFile.write('\n'.join(sorted(records)))
os.walk()返回Directory tree generator。每次⽣成格式为(dirpath, dirnames, filenames) 的tuple,元素依次是当前路径、当前路径下⽂件夹列表、当前路径下⽂件名列表。
list的.append()、.extend()和.sort()⽅法都是原地修改,sorted()函数不是。
将list写⼊.txt⽂件时需要把list转为str,直接⽤str()函数强转会很丑,⽤换⾏符连接list每个元素会好看很多。
os.path代表系统换⾏符,windows下为”\r\n”,其他系统多是”\n”。然⽽⽆论是⽤os.path还是”\n”连接列
表元素,最后⽤windows记事本打开都⼀样换⾏,但是⽤vs code打开的话os.path会多换⼀⾏即看上去⼀⾏间⼀⾏,这⾥⾯到底为啥有点说到,可能和Python的write机制有关,暂时不深究(留坑)。
关于⽂件读写,⼤多数资料推荐with as形式,确实更简洁⼀点。
PS:
说os.walk()暴⼒是因为它真的按照⽬录树遍历了所给路径中的所有⽂件夹和⽂件,⽂件量⼤⽽所要的⽂件名少的情况下会慢⼀些(其实我觉得慢不了多少),⽤os.listdir()写成递归函数的话执⾏效率可能会⾼⼀些,但是os.walk()逻辑简单好写,各位随意,我⼲了!
以上这篇Python3.遍历某⽂件夹提取特定⽂件名的实例就是⼩编分享给⼤家的全部内容了,希望能给⼤家⼀个参考,也希望⼤家多多⽀持脚本之家。
发布评论