下面有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)
答案 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 module。 here回答了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)