遍历JSON文件的文件夹以从Python中的每个文件提取相同的关键字

时间:2019-02-21 17:55:58

标签: python python-3.x

下面有Python代码,我试图在其中访问一个名为download的文件夹,其中包含多个JSON对象文件。

在每个JSON中,我需要提取一个值keyword并将其添加到名为keywordList的列表中

我试图将文件名添加到fileList(可以正常工作),但是我似乎无法遍历fileList并提取连接的keyword

非常感谢艾米的帮助,谢谢!

import os

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:
        keywordList.append(currentFile['keyword'])

print(keywordList)

5 个答案:

答案 0 :(得分:0)

open()将文件句柄返回到打开的文件。您仍然需要遍历文件的内容。默认情况下,内容按行尾(\ n)分割。之后,您必须将关键字与该行匹配。

将第二个for循环替换为:

for file in filenames:
    with open(file, encoding='utf-8', mode='r') as currentFile:
        for line in currentFile:
            if 'keyword' in line:
                keywordList.append('keyword')

另外,请查看Python JSON modulehere回答了json / dicts上的递归迭代。

答案 1 :(得分:0)

您要在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'])

答案 2 :(得分:0)

您的问题提到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提到了glob版本效果更好。也有选择。

答案 3 :(得分:0)

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)

答案 4 :(得分:0)

您正在使用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)