J'ai le code Python ci-dessous dans lequel j'essaie d'accéder à un dossier appelé téléchargé qui contient plusieurs fichiers objets JSON.
Dans chaque JSON, il y a une valeur mot-clé pour laquelle je dois extraire et ajouter à la liste nommée keywordList
J'ai essayé d'ajouter les noms de fichiers à fileList (qui fonctionne bien), mais je n'arrive pas à parcourez la fileList et extrayez le mot-clé connecté.
Amy aide beaucoup appréciée, merci!
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 Réponses :
open () renvoie un descripteur de fichier au fichier ouvert. Vous devez toujours boucler sur le contenu du fichier. Par défaut, le contenu est divisé par fin de ligne (\ n). Après cela, vous devez faire correspondre le mot-clé à la ligne.
Remplacez la deuxième boucle for par:
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')
Jetez également un œil à Module Python JSON . Une itération récursive sur json / dicts est répondue ici a >.
Vous ajoutez les noms de fichiers dans le tableau fileList mais dans la seconde boucle for, vous parcourez les noms de fichiers au lieu de fileList. importer os
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'])
Votre question mentionnait JSON. J'ai donc abordé cela. Faites-moi savoir si cela vous aide.
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)
EDIT note : la réponse mise à jour change pour la boucle de la réponse d'origine de:
pour le nom de fichier dans os.listdir (chemin)
La version globale mentionnée par OP fonctionnait mieux. Avait donné cela comme alternative aussi.
Merci @JGFMK, cela fonctionne, mais j'ai dû utiliser l'ajout du code pour lequel vous avez écrit 'ou pour traiter uniquement les fichiers JSON:' Sans cet ajout, j'obtenais une erreur de fichier introuvable pour tous les JSONS. Je ne sais pas pourquoi, si vous avez une idée, faites-le moi savoir pour m'aider à comprendre. Merci!
C'est intéressant - puisque je l'ai bricolé à partir d'une autre question de débordement de pile similaire concernant le traitement de toutes les entrées d'un répertoire. J'ai anticipé que votre dossier pourrait contenir des éléments qui n'étaient pas JSON et j'ai ajouté un peu plus. Voici le lien dont je l'ai récupéré. Il existe ce fil similaire pratique également
Je vais modifier la réponse pour le faire alors.
La ligne pour le fichier dans les noms de fichiers: ne devrait-elle pas être pour le fichier dans la liste de fichiers: ?
Je pense également que c'est la bonne façon d'utiliser 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)
Vous utilisez currentFile comme s'il s'agissait d'un objet json, mais ce n'est qu'un descripteur de fichier. J'ai ajouté l'étape manquante, l'analyse du fichier à un objet 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)