J'ai reçu ce code simple dans Python qui écrit un "ABC" dans un fichier texte d'appels test.txt code>. Maintenant, sur une framboise exécute ce code avec oisif ou THONNY ne fonctionne pas, le fichier texte reste vide ... mais au lieu de cela, lorsque vous appelez avec le terminal, il écrit le texte dans le fichier. Quelqu'un peut-il aider?
4 Réponses :
essayer d'appeler f.close () à la fin de votre code? P>
La meilleure pratique des fichiers d'écriture utilise avec code>, il fermera et libérera votre fichier automatiquement.
with open("test.txt","w") as f:
f.write("abc")
Fichier tampon Python écrit par défaut. Cela fait cela à des fins de performance. Chaque fois que Python écrit dans un fichier (ou un flux IO contrôlé par le système d'exploitation, comme STDOUT), il doit mettre en pause l'exécution et le contrôle des mains au système d'exploitation. Si le système d'exploitation est occupé à faire autre chose, ou si le disque où vous souhaitez écrire vos données est occupé à faire autre chose, vous pouvez attendre longtemps pour une réponse. Au lieu d'attendre chaque fois que vous souhaitez écrire quelque chose, Python écrit les données sur une mémoire tampon en mémoire, puis promet de finalement écrire le contenu de la mémoire tampon dans un fichier une fois que le tampon remplit (un processus appelé "rinçage" de la mémoire tampon). Cela permet à l'exécution de votre programme de continuer immédiatement.
Le risque Lorsque vous utilisez des tampons d'écriture, c'est que si votre programme se bloque avant que le tampon ne soit rincé sur le disque, vous perdez ces données. De plus, si un programme écrit sur un tampon et continue d'exécuter de cette manière, il n'est pas garanti qu'un programme en cours d'exécution concurrencera ces données sur le disque jusqu'à ce que le premier programme afflit d'une autre manière. Ce second scénario est ce qui se passe dans votre exemple: Idle exécute un processus Python qui écrit sur un tampon et vous exécutez un deuxième processus simultané pour vérifier sur le fichier pendant que l'inactif est toujours en marche. Parce que le tampon n'a pas été rincé dans Idle, vous ne verrez rien écrit. Cela ne se produit pas lorsque vous exécutez le programme à partir du terminal car le processus de python se termine et l'une des tâches de nettoyage effectuées lorsqu'un processus se termine consiste à rincer tous les tampons d'écriture. P>
Il y en a beaucoup façons de forcer une tampon rincer. NOREFERRER"> Python Flushes Écrire des tampons automatiquement lorsque les fichiers sont fermés , Pour que vous puissiez essayer: p> Le moyen préféré d'ouvrir les fichiers dans Python utilise un si vous souhaitez conserver le fichier ouvert et affleurer manuellement le tampon d'écriture, Python vous donne le Enfin, vous pouvez dire à Python d'utiliser un tampon de taille différente que la valeur du système d'exploitation en passant le avec code> Déclaration Contexte Manager
. Lorsque l'exécution quitte le bloc avec code>, les variables créées dans l'instruction code> avec code> sont racontées de se nettoyer, ce qui dans le cas des fichiers signifie les fermer. Donc, vous pouvez essayer: p>
flush code> méthode
, afin que vous puissiez également écrire: p> < Pré> xxx pré> Bumboring code> Argument à
. Une valeur de Ouvrir code>
0 code> indique à Python d'avoir immédiatement rincer chaque écriture sur disque. Donc, vous pouvez le faire: p>
Lorsque vous ouvrez explicitement le fichier en faisant
with open("test.txt","w") as f: f.write("abc")
Si écrit sur une ligne, c'est une erreur de syntaxe de toute façon. Vous terminez probablement le terminal avant de lire le fichier. Cela déclenche le rinçage du tampon de fichier et la fermeture du fichier (qui devrait mieux être effectué explicitement dans le code).
Hé, je viens de modifier le code, bien sûr, il est écrit en 2 lignes