Цикл по папке файлов JSON для извлечения одного и того же ключевого слова из каждого в Python

Я использовал его для создания объектов на основе памяти, содержащей сообщения, полученные из сети.

0
задан SDROB 21 February 2019 в 17:55
поделиться

4 ответа

В вашем вопросе упоминается JSON. Итак, я обратился к этому. Дайте мне знать, если это поможет.

import json
import os
import glob
import pprint
keywordList = []
path = '/Users/Me/Api/downloaded'
for filename in glob.glob(os.path.join(path, '*.json')): #only process .JSON files in folder.      
    with open(filename, encoding='utf-8', mode='r') as currentFile:
        data=currentFile.read().replace('\n', '')
        keyword = json.loads(data)["keytolookup"]
        if keyword not in keywordList:
            keywordList.append(keyword)
pprint(keywordList)

РЕДАКТИРОВАТЬ примечание : обновленное изменение ответа для цикла по сравнению с первоначальным ответом:
for filename in os.listdir(path)
OP упомянутой версии глоба работает лучше. Это тоже было в качестве альтернативы.

0
ответ дан JGFMK 21 February 2019 в 17:55
поделиться

Вы добавляете имена файлов в массив fileList, но во втором цикле for вы перебираете имена файлов вместо fileList. импорт ОС

os.chdir('/Users/Me/Api/downloaded')

fileList = []
keywordList = []

for filenames in os.walk('/Users/Me/Api/downloaded'):
    fileList.append(filenames)

for file in fileList:
    with open(file, encoding='utf-8', mode='r') as currentFile:
        keywordList.append(currentFile['keyword'])
0
ответ дан Shashank Shekhar Shukla 21 February 2019 в 17:55
поделиться

Вы используете currentFile, как будто это объект json, но это только дескриптор файла. Я добавил недостающий шаг - анализ файла в объект json.

import os
import json

os.chdir('/Users/Me/Api/downloaded')

fileList = []
keywordList = []

for filenames in os.walk('/Users/Me/Api/downloaded'):
    fileList.append(filenames)

for file in filenames:
    with open(file, encoding='utf-8', mode='r') as currentFile:
        data = json.load(currentFile)  # Parses the file to json object
        keywordList.append(data['keyword'])

print(keywordList)
0
ответ дан Araldo van de Kraats 21 February 2019 в 17:55
поделиться

Разве строка for file in filenames: не должна быть for file in fileList:?

Также я думаю, что это правильный способ использования os.walk()

import os

fileList = []
keywordList = []

for root, dirs, files in os.walk('/Users/Me/Api/downloaded', topdown=False):
   for name in files:
      fileList.append(os.path.join(root, name))

for file in fileList:
    with open(file, encoding='utf-8', mode='r') as currentFile:
        keywordList.append(currentFile['keyword'])

print(keywordList)
0
ответ дан VietHTran 21 February 2019 в 17:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: