2017-12-17 3 views
0

Ich habe eine noob Python Frage ... also ertragen Sie mit mir.Öffnen mehrerer Dateien in Python vor dem Schließen der vorherigen?

Kann ich mehrere Dateien vor dem Schließen der vorherigen öffnen. So ... kann ich laufen

import os 
files=[] 
for file in os.listdir(os.curdir): 
    files.append(open(file,'w')) 

dann jede Datei bearbeiten, wie ich mit

for file in files: 
    file.close() 

Vielen Dank im Voraus

+0

Haben Sie versucht, den Code auszuführen? – Goyo

+0

Ya Ich bin nur sicher, ob es logisch falsch war –

+0

Sie können dies tun, aber es scheint nicht wie ein guter Ansatz. Warum nicht einfach jede Datei öffnen, verarbeiten und dann schließen? –

Antwort

0

Ihre Lösung wird sicherlich wollen und beenden arbeiten, aber der empfohlene Weg wäre zu verwenden contextmanager, damit die Dateien nahtlos behandelt werden. Zum Beispiel

for filename in os.listdir(os.curdir): 
    with open(filename, 'w') as f: 
     # do some actions on the file 

Die with Anweisung wird für Sie kümmern sich um die Datei zu schließen.

+0

Super! Ich danke dir sehr. –

+0

Aber es ist hier geschrieben, das wird jede Datei * vor * schließen die nächste zu schließen. – zvone

0

Scheint echt und funktioniert gut.

Es wäre schwierig für Sie, Operationen auf diese Weise durchzuführen. Die Liste "Dateien" enthält nicht die Dateinamen. Sie würden nicht wissen, welche Datei was ist.

0

Es ist völlig in Ordnung, jede Datei mit open und später close alle von ihnen zu öffnen. Sie sollten jedoch sicherstellen, dass alle Ihre Dateien ordnungsgemäß geschlossen sind.

Normalerweise würden Sie dies für eine Datei tun:

with open(filename,'w') as f: 
    do_something_with_the_file(f) 
# the file is closed here, regardless of what happens 
# i.e. even in case of an exception 

Sie könnten das gleiche mit mehreren Dateien tun:

with open(filename1,'w') as f1, open(filename2,'w') as f2: 
    do_something_with_the_file(f) 
# both files are closed here 

Nun, wenn Sie N-Dateien haben, können Sie Ihre eigenen schreiben Kontext-Manager, aber das wäre wahrscheinlich ein Overkill. Stattdessen würde ich vorschlagen:

open_files = [] 
try: 
    for filename in list_of_filenames: 
     open_files.append(open(filename, 'w')) 

    # do something with the files here 

finally: 
    for file in open_files: 
     file.close() 

BTW, Ihr eigener Code deltes den Inhalt aller Dateien im gegenwärtigen Verzeichnis. Ich bin nicht sicher, dass Sie wollten, dass:

for file in os.listdir(os.curdir): 
    files.append(open(file,'w')) # open(file,'w') empties the file!!! 

Vielleicht wollte man open(file, 'r') oder open(file, 'a') statt? (siehe https://docs.python.org/2/library/functions.html#open)

Verwandte Themen