我写了一个小python程序来处理目录中的所有文件。我想限制它只包含该目录中的JSON文件。例如,下面剪切的代码中的行fname in fileList:
应该只枚举扩展名为* .json
#Set the directory you want to start from
rootDir = '/home/jas_parts'
for dirName, subdirList, fileList in os.walk(rootDir):
print('Found directory: %s' % dirName)
for fname in fileList:
print('\t%s' % fname)
fname='jas_parts/'+fname
with open(fname, 'r+') as f:
json_data = json.load(f)
event = json_data['Total']
print(event)
答案 0 :(得分:8)
由于您的文件名是字符串,因此您可以使用str.endswith
方法检查它是否为json
文件。
if fname.endswith('.json'):
#do_something()
答案 1 :(得分:3)
只需过滤您感兴趣的名称。
if fname[-5:] == '.json':
(当然,你也可以使用os.path.splitext
,或re
,这与你如何进入扩展无关紧要)
答案 2 :(得分:3)
以下是该问题的一般解决方案:"如何对名称与目录Y下的某种模式匹配的所有文件执行X?"
#!python
from __future__ import print_function
import fnmatch, os, os.path
def files_under(directory, pattern):
'''Yield all files matching pattern under some directory
'''
for p, dnames, fnames in os.walk(directory):
for match in fnmatch.filter(fnames, pattern):
yield(os.path.join(p, match))
if __name__ == '__main__':
import sys
if len(sys.argv) < 3:
print('Must supply path and (quoted) pattern', file=sys.stderr)
sys.exit(1)
try:
for each in files_under(sys.argv[1], sys.argv[2]):
print(each)
except EnvironmentError, e:
print ('Error trying to walk tree: %s ' % e, file=sys.stderr)
sys.exit(2)
函数是files_under()
,其余的只是一个非常简单的包装器来打印匹配的结果。
它也很容易扩展它以处理多个模式,甚至还需要一些额外的工作,以确保名称与多个模式匹配的文件每次只yield
一次。但我会将这些改进作为练习留给学生。