J'essaie de créer plusieurs fichiers JSON en boucle, j'essaye ci-dessous, mais je reçois une erreur ci-dessous
storage_info =({"VolumeType": vol_type,"Size": vol_size,"InstanceId": inst_id,"Encrypted": encryption_status,"AliasName": alias_name})
for s in storage_info:
filename = 'c:\csv\volume_current_{vol_size}.json'
with open(filename, "w") as f:
json.dump(storage_info, f, indent=4, separators=(',', ': '))
3 Réponses :
Vous ne mentionnez pas la bonne clé pour vol_size .
Je suppose que storage_info est une liste de plusieurs dict .
Vous pouvez faire comme ceci:
storage_info = {"VolumeType": vol_type,"Size": vol_size,"InstanceId": inst_id,"Encrypted": encryption_status,"AliasName": alias_name}
filename = 'c:\csv\\volume_current_{}.json'.format(storage_info['Size'])
with open(filename, "w") as f:
json.dump(storage_info, f, indent=4, separators=(',', ': '))
Si votre storage_info est dict code> lui-même, alors vous devez faire comme ceci pour chaque storage_info que vous obtenez:
storage_info = [{"VolumeType": vol_type,"Size": vol_size,"InstanceId": inst_id,"Encrypted": encryption_status,"AliasName": alias_name}, {"VolumeType": vol_type_one,"Size": vol_size_one,"InstanceId": inst_id_one,"Encrypted": encryption_status_one,"AliasName": alias_name_one}]
for s in storage_info:
filename = 'c:\csv\\volume_current_{}.json'.format(s['Size'])
with open(filename, "w") as f:
json.dump(storage_info, f, indent=4, separators=(',', ': '))
J'obtiens une erreur filename = 'c: \ csv \ volume_current _ {}. Json'.format (s [' Size ']) TypeError: les indices de chaîne doivent être des entiers
chaque fois en boucle, j'obtiens ce storage_info comme ceci `{'VolumeType': 'gp', 'Size': 2, 'InstanceId': 'xxxxxxxxxxx', 'Encrypted': True, 'AliasName': 'EBS'}
s est {'VolumeType': 'gp', 'Size': 2, 'InstanceId': 'xxxxxxxxxxx', 'Encrypted': True, 'AliasName': 'EBS'} . Droit?
Oui. chaque itération obtiendra tous les volumes un par un comme ci-dessus
Essayé, d'obtenir le même Oserror: [errno 22] argument non valide: 'C: \\ csv \ x0bolume_current_8.json' code>. hein ... il semble que ce ne semble pas être capable de former chemin ..dont savoir pourquoi :( je l'exécute dans Windows
généralement lorsque j'écris un seul json, j'ouvre comme ceci r "c: \ csv \ name.json", w est-ce nécessaire..confus avec le formatage de la chaîne lors de la création du fichier
ok, maintenant vous obtenez le bon nom et maintenant le problème est d'avoir le bon chemin. Droit?
Non, je viens de dire exemple même j'ai essayé comme ça FileName = 'c: \ csv \ volume_current _ {}. Json'.format (Storage_info ["Taille"]) avec Open (R "{FileName}", "W" ) comme f: code>. Pas d'erreur, mais sa nette pas de créer des fichiers. pourrait être une erreur idiote que je fais, je ne sais pas où il me manque
un chemin \ in supplémentaire a corrigé le problème `filename = f'c: \ csv \\ volume_current_ {vol_size} .json'`
Le problème vient de la variable filename . La variable est statique à une chaîne. Vous pouvez simplement utiliser des littéraux de chaîne f pour résoudre le problème.
Remplacez simplement filename = 'c: \ csv \ volume_current_ {vol_size} .json' par filename = f'c: \ csv \ volume_current_ {vol_size} .json '
et tout devrait fonctionner correctement.
Code complet
storage_info =({"VolumeType": vol_type,"Size": vol_size,"InstanceId": inst_id,"Encrypted": encryption_status,"AliasName": alias_name})
for s in storage_info:
filename = f'c:\csv\volume_current_{vol_size}.json'
with open(filename, "w") as f:
json.dump(storage_info, f, indent=4, separators=(',', ': '))
p>
essayé d'obtenir la même erreur ... il ne remplace pas correctement le chemin du fichier :(
c: \ csvolume_current_8.json lorsque j'ai essayé d'imprimer le nom du fichier, il semble qu'il y ait un problème avec \ in path
Quelle est la valeur de la variable vol_size ? L'avez-vous déclaré ou l'obtenez-vous à partir de storage_info ? Parce que si vous l'obtenez à partir des dictionnaires stockés dans la variable storage_info , filename = f'c: \ csv \ volume_current_ {s ['vol_size']}. Json ' devrait marcher.
Comment votre nom de fichier a-t-il été modifié à partir de 'C: \\ csv \ x0bolume_current_ {vol_size} .json' code> à juste c: \ csvoluume_current_8.json code>. Le comportement attendu était 'c: \\ csv \ volume_current_8.json' code>
un chemin \ in supplémentaire a corrigé le problème filename = f'c: \ csv \\ volume_current_ {vol_size} .json '
J'ai résolu le problème maintenant, tout ce que j'ai fait ajouter un \ dans le chemin ci-dessous. Je ne sais pas si le chemin est correct ou non, il considère maintenant le chemin comme correct
filename = f'c:\csv\\volume_current_{vol_size}.json'
to
filename = f'c:/csv/volume_current_{vol_size}.json'
Edit2:
remplacé \ vers / dans le chemin cela fonctionne (un apprentissage que je devrais utiliser /)
for s in storage_info:
filename = f'c:\csv\\volume_current_{vol_size}.json'
print(filename)
with open(filename, "w") as f:
json.dump(storage_info, f, indent=4, separators=(',', ': '))