Python os模块实例之遍历目录及子目录指定扩展名的文件
Posted 好好学习,天天向上
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python os模块实例之遍历目录及子目录指定扩展名的文件相关的知识,希望对你有一定的参考价值。
需求:在该目录下有很多子目录(如下图,截图了部分),现要从该目录和所有子目录下找到所有扩展名为.meta的文件,并获取文件中第二行guid的值(\': \'后面的),然后将所有guid的值输出到另一文件中
.meta文件截图:
思路:
遍历当前目录的子目录,如果是文件并且扩展名为.meta,获取guid,写入到guid.txt;如果是子目录,则遍历子目录下的文件。
方法一:
#!usr/bin/env python # -*- coding: utf-8 -*- import os outfile = open(\'guid.txt\', \'a\') # 以追加方式打开输出文件 for dir in os.listdir(\'.\'): # 遍历当前目录所有问价和目录 child = os.path.join(\'.\', dir) # 加上路径,否则找不到 if os.path.isdir(child): # 如果是目录,则继续遍历子目录的文件 for file in os.listdir(child): if os.path.splitext(file)[1] == \'.meta\': # 分割文件名和文件扩展名,并且扩展名为\'meta\' file = os.path.join(child, file) # 同样要加上路径 f = open(file, \'r\') guid = f.readlines()[1].split(\': \')[1] # 获取文件第二行以\': \'分割的后者 outfile.write(guid) # 写入输出文件 f.close() elif os.path.isfile(child): # 如果是文件,则直接判断扩展名 if os.path.splitext(child)[1] == \'.meta\': f = open(child, \'r\') guid = f.readlines()[1].split(\': \')[1] outfile.write(guid) f.close() outfile.close()
方法二:上面的方法只能遍历两级目录,如果要遍历三级目录,必须还要加一个for循环。那么可以用到os.walk()方法一次性遍历当前目录和所有子目录的文件和目录。
#!usr/bin/env python # -*- coding: utf-8 -*- import os outfile = open(\'guid.txt\', \'a\') # 以追加方式打开输出文件 for dirpath, dirs, files in os.walk(\'.\'): # 递归遍历当前目录和所有子目录的文件和目录 for name in files: # files保存的是所有的文件名 if os.path.splitext(name)[1] == \'.meta\': filename = os.path.join(dirpath, name) # 加上路径,dirpath是遍历时文件对应的路径 f = open(filename, \'r\') guid = f.readlines()[1].split(\': \')[1] # 获取文件第二行以\': \'分割的后者 outfile.write(guid) # 写入输出文件 f.close() outfile.close()
在该目录下运行此程序,将会得到guid.txt。
相关方法的作用和理解见:http://www.cnblogs.com/victorwu/p/5838430.html
以上是关于Python os模块实例之遍历目录及子目录指定扩展名的文件的主要内容,如果未能解决你的问题,请参考以下文章