2
votes

La boucle For évite d'écrire la dernière clé dans un dictionnaire

J'ai un dictionnaire comme celui-ci,

 for sam in sample1.keys():
    doc  = sam + '.doc'
    doc  = open(doc, 'w')
    doc.write("A: [\n")

Et maintenant, j'ai besoin d'écrire des clés dans sample1 ci-dessus en tant que fichier doc et c'est ce que j'ai essayé.

 print(sample_dict)
 dict_items([('SAP', ['SAP_MM_1.gz', 'SAP_MM_2.gz']), ('LUF',['LUF_1.gz', 'LUF_2.gz'])])

 sample1    = {x:[sample_dict[x][0]] for x in sample_dict}

print(sample1)
 dict_items {'SAP': ['SAP_MM_1.gz'],
     'LUF': ['LUF_1.gz']} 

Maintenant, il a créé deux fichiers pour SAP et LUF , mais seul SAP est écrit et l'autre fichier est vide. La boucle For évite en quelque sorte d'écrire la dernière clé dans sample1 . Je ne comprends pas ce qui ne va pas ici. Toutes suggestions seraient appréciées.

Merci


1 commentaires

Publier sample_dict


3 Réponses :


3
votes

Je pense que cela pourrait être un cas où Python ne vide pas le flux. Vous devriez probablement fermer le fichier après l'écriture (ou mieux encore, utiliser le gestionnaire de contexte):

with open(doc, 'w') as my_file:
    my_file.write('whatever')


0 commentaires

3
votes

Vous ne fermez pas le fichier après y avoir écrit. Vous pouvez le fermer explicitement, mais il est plus simple d'utiliser simplement avec car cela fermera le fichier même si le code échoue.

 for sam in sample1.keys():
    doc  = sam + '.doc'
    with output as open(doc, 'w'):
        output.write("A: [\n")


0 commentaires

2
votes

Vous devez ouvrir deux fichiers séparés avant d'y écrire. Mon approche serait quelque chose comme ci-dessous:

for sam in sample1.keys():
    with open(sam + '.doc', 'w') as sam_doc:
        sam_doc.write("A: [\n")

Explication

L'ouverture d'un fichier à l'aide de l'instruction with ferme le fichier automatiquement après la mise à jour.


2 commentaires

Merci, mais j'ai une grande liste de fichiers, donc je pense qu'il vaut mieux utiliser le avec avec une boucle for


Modification de la réponse, selon vos besoins