2017-03-06 1 views
1

Voici ce que je fais dans le Terminal:Pourquoi la commande .read() faire des choses différentes lorsque la sortie est enregistrée dans une variable

>>> file1 = open('file1.txt', 'r') 
>>> file1.read() 
    'Content 1' 
>>> new_file1 = file1.read() 
>>> print(new_file1) 

Pourquoi est-il que lorsque j'utilise un .read () commande directement sur le fichier 1 j'obtiens le contenu du fichier, mais quand j'essaie de enregistrer que la sortie à une variable, je reçois une chaîne vide?

+4

Vous avez déjà lu le fichier. Il n'y a plus rien à lire lorsque vous essayez de lire plus. Réinitialisez le pointeur de fichier ('file1.seek (0)') ou fermez et rouvrez le fichier. – dsh

+2

Ce que dit 'dsh'. Mais bien sûr, il vaut mieux éviter de lire les mêmes données de fichier plus d'une fois. –

+0

Ah, merci :) –

Répondre

1

file s sont des itérateurs, et la lecture d'un fichier épuise l'itérateur. En d'autres termes, le premier read() l'utilise.

Pour lire le même fichier que vous pouvez fermer puis rouvrir le fichier, ou déplacer le pointeur interne du dossier au début: file1.seek(0)

NBfile s sont de cette façon particulière; la plupart des itérateurs ne peuvent pas être réinitialisés.

+1

Les fichiers ne sont pas * simplement * itérables. La plupart des choses qui sont itérables peuvent être itérées plusieurs fois (listes, par exemple). Mais les fichiers * sont des itérateurs *. Un itérateur ne peut généralement être utilisé qu'une seule fois. Les fichiers trichent un peu sur le protocole de l'itérateur en vous permettant de «revenir» au début après qu'ils ont été épuisés. La plupart des itérateurs ne vous laissent pas faire cela. – Blckknght

+0

@Blckknght: Merci, corrigé. –