2014-05-08 10 views
0

Je suis encore une fois l'une des personnes qui étudient En savoir Python la série dure et dans excercise 17 suis tombé avec:Ouvrir le fichier, écrire pour et imprimer le résultat

out_file = open(to_file, 'w') 
out_file.write(indata) 

donc suivant quelques instructions i converti en une forme de:

with open(to_file, 'w') as out_file: 
    out_file.write(indata) 

Je ne sais pas si c'est la meilleure façon de faire des choses, mais il a été chargé à utiliser lors de la lecture du fichier. Donc vraiment ma question est comment puis-je imprimer ce que j'ai écrit dans out_file. J'ai essayé simplement à l'aide suivante:

with open(to_file, 'rw+') as out_file: 
    out_file.write(indata) 
    print out_file.read() 

et plusieurs autres façons, mais je ne peux pas le faire pour imprimer quoi que ce soit. Je me demandais simplement s'il était possible de le faire de cette façon ou si je devais encore ouvrir le fichier séparément pour l'imprimer.

Et y compris une autre question ici concernant le sujet que j'utilise l'impression avec with

with open(to_file, 'r') as out_file: 
    print out_file.read() 

Merci à l'avance

+0

Pourquoi ne pas simplement "imprimer indata"? Et quel est exactement le problème avec le dernier extrait de code? – jonrsharpe

+0

Utilisez 'r +'. [tutoriel ici.] (https://docs.python.org/2/tutorial/inputoutput.html#reading-and-writing-files) –

+0

Après avoir écrit les données, vous êtes probablement à la fin du fichier. Il n'y a donc rien à lire: vous devrez replacer le pointeur de fichier au début du fichier et lire à partir de là. – Evert

Répondre

0

le problème avec l'extrait suivant:

with open(to_file, 'r+') as out_file: 
    out_file.write(indata) 
    print out_file.read() 

est que l'index du fichier sera à la fin, et donc il n'y aura rien à lire. Pour résoudre cela, il suffit d'utiliser seek():

with open(to_file, 'r+') as out_file: 
    out_file.write(indata) 
    out_file.seek(0) 
    for line in out_file.readline(): 
    print line 

Bien que, l'écriture et la lecture dans le même bloc de code a peu de sens dans la vie réelle, comme vous devriez toujours avoir les données que vous avez écrit, et parce que les E/S sur le disque sont beaucoup plus chers que la RAM que vous utilisez pour conserver les données, de sorte que vous pouvez juste faire:

with open(to_file, 'w') as out_file: 
    out_file.write(indata) 

with open(to_file, 'r') as in_file: 
    for line in in_file.readline(): 
    print(line) 
0

imprimer uniquement ce que vous écrivez au fichier (je suppose que c'est une chaîne) :

with open(to_file, 'rw+') as out_file: 
    out_file.write(indata) 
    print indata 

A propos de votre deuxième question, vous pouvez lire et des lignes d'impression: séparément

with open(to_file, 'r') as out_file: 
    for l in out_file.readlines() 
     print l 
0

Une fois le fichier écrire, vous devez revenir en arrière au début afin de lire ce que vous » Je viens d'écrire:

In [152]: with open('test.file', 'w+') as out_file: 
    out_file.write(data) 
    out_file.seek(0) 
    print out_file.read() 
    .....:  
test string 
Questions connexes