批处理文件

查找路径下指定文件名并返回

TARGETPATH = r'E:\data'
records = []
for currentDir, _, includedFiles in os.walk(TARGETPATH):
    if not currentDir.endswith('_capacity'): continue
    else:
        records.append(currentDir)  # 将以“capacity”结尾的文件夹名加入records
        records.extend(includedFiles)  # 将该文件夹内的文件名列表扩展到records

# 将records写入.csv
csvFile = open(os.path.join(TARGETPATH, 'capacity_all.csv'), 'w')
csvFile.write(os.linesep.join(records))
csvFile.close()

# 将排序后的records写入.csv
with open(os.path.join(TARGETPATH, 'capacity_all.csv'), 'w') as csvFile:
    csvFile.write('
'.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下为” ”,其他系统多是” ”。然而无论是用os.path还是” ”连接列表元素,最后用windows记事本打开都一样换行,但是用vs code打开的话os.path会多换一行即看上去一行间一行,这里面到底为啥有点说到,可能和Python的write机制有关,暂时不深究(留坑)。
  • 关于文件读写,大多数资料推荐with as形式,确实更简洁一点 

说os.walk()暴力是因为它真的按照目录树遍历了所给路径中的所有文件夹和文件,文件量大而所要找的文件名少的情况下会慢一些(其实我觉得慢不了多少),用os.listdir()写成递归函数的话执行效率可能会高一些,但是os.walk()逻辑简单好写。

原文地址:https://www.cnblogs.com/luban/p/9417432.html