2015-03-30 3 views
2

Я написал небольшую программу python, которая обрабатывает все файлы в каталоге. Я хочу ограничить это включением только JSON-файлов в этот каталог. Например, линия fname in fileList: в коде отрезала ниже, должны перечислять только файлы с расширением * .jsonОбработка определенных файлов в каталоге в python

#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) 

ответ

8

с вашего имени файла строка, которую вы можете использовать метод str.endswith, чтобы проверить, если это json файл.

if fname.endswith('.json'): 
    #do_something() 
3

Просто фильтровать имена, которые вас интересуют.

if fname[-5:] == '.json': 

(конечно, вам можно также использовать os.path.splitext или re, на самом деле не важно, как вы получите расширение)

3

Это общее решение вопроса: «Как мне сделать X для всех файлов с именами, соответствующими некоторому шаблону в каталоге Y?»

#!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 ed раз в каждый. Но я оставлю эти улучшения в качестве упражнения для ученика.

+0

Кстати, шаблон использования для этой функции: 'json_files = files_under ('.', '* .json')' ... а затем вы можете использовать: 'для каждого в json_files: ...' (например) , Таким образом, код и читать почти как английский. –

Смежные вопросы