2017-08-20 3 views
1

Hallo ich habe mit Winston Ewerts Codebeispiel von diesem Thread experimentiert.Python: Wie schließe ich meine CSV-Ein- und Ausgabedateien?

Python: Removing duplicate CSV entries

Aber ich kann nicht meine Ein- und Ausgabedateien schließen. Was mache ich falsch?

write_outfile.close()

write_infile.close()

Traceback (most recent call last): File "Duplicates_01.py", line 26, in write_outfile.close() AttributeError: '_csv.writer' object has no attribute 'close'

import csv 

write_infile = csv.reader(open('File1.csv', 'r')) 
write_outfile = csv.writer(open('File2.csv', 'w')) 

#write_infile = open('File1.csv', 'r') 
#f1 = csv.reader(write_infile) 
#f1 = csv.reader(write_infile, delimiter=' ') 

#write_outfile = open('File2.csv', 'w') 
#f2 = csv.writer(write_outfile) 
#f2 = csv.writer(write_outfile, delimiter=' ') 

phone_numbers = set() 

for row in write_infile: 
    if row[1] not in phone_numbers: 
     write_outfile.writerow(row) 
#  f2.writerow(row) 
     phone_numbers.add(row[1]) 

# write_outfile.close() 
# write_infile.close() 

File1.csv

user, phone, email 
joe, 123, [email protected] 
mary, 456, [email protected] 
ed, 123, [email protected] 
+0

Warum können Sie sie nicht schließen? Welchen Fehler bekommst du? Warum haben Sie die Schlussaussagen auskommentiert? –

Antwort

4

by doing:

csv.reader(open('File1.csv', 'r')) 

Sie eine anonyme Datei-Handle zu csv.reader Objekte vorbei sind, so kann man nicht steuern, wenn die Datei geschlossen wird (es ist dieser Griff, die geschlossen werden muss, nicht das csv.reader Objekt)

Die close Methode gelten muss auf die Datei-Handle (csv-Leser/Schreiber Objekte auf Listen arbeiten, Iteratoren, ..., können sie eine close Methode nicht haben), damit ich tun würde:

fr = open('File1.csv', 'r') 

und

csv.reader(fr) 

dann

fr.close() 

oder einen Kontext-Manager verwenden:

with open('File1.csv', 'r') as fr: 
    csv.reader(fr) 

und Datei werden so schnell geschlossen werden, wie Sie den Kontext

Abgesehen verlassen: es gibt ein extra Fang bei der Erstellung CSV-Dateien in einigen Python-Versionen. die Verwendung eines Handles wie open('File2.csv', 'w') kann Probleme verursachen (leere Zeilen eingefügt). Für eine kompatible & robuste Weise können Sie lesen this Q&A

Verwandte Themen