在python中处理目录中的特定文件

时间:2015-03-30 06:29:04

标签: python json

我写了一个小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)

3 个答案:

答案 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一次。但我会将这些改进作为练习留给学生。