2016-03-19 9 views
0

Ich muss eine CSV-Datei mit irgendwie lustigen Zeilenumbrüche in einen Datenrahmen lesen. Ist dies der effizienteste Weg?lesen CSV-Datei mit speziellen Zeilenumbrüche

with open(fileToRead,'r') as file: 
    filedata = file.read().replace("#@#@#", "\n") 
    file.close() 
df = pandas.read_csv(filepath_or_buffer=StringIO(filedata), sep='~') 

Der Code funktioniert, aber ich bin mir nicht sicher, das ist der beste Weg, es zu tun.

Gibt es eine Möglichkeit, dies zu tun, ohne die Datei in die Variable filedata zu speichern?

+7

Beachten Sie, dass "file.close" ist: 1. Ein Tippfehler, wie Sie die Klammern, die es nennen würde und tatsächlich * alles tun *; und 2. Redundant, da Sie den 'with'-Kontextmanager verwenden. – jonrsharpe

+0

'read_csv' hat eine Zeilenabschlussoption, aber es kann nur ein Zeichen lang sein. Ihr Fall scheint anders zu sein – Sharad

+0

Ich bin mir nicht sicher, ob das 'csv' Modul der Standardbibliothek auch Mehrfachzeichen-Terminatoren akzeptiert. Was denkst du ist falsch mit deiner aktuellen Lösung? Wenn Sie keine Kontrolle über das Aussehen der Eingabedatei haben, scheint dies das Problem zu lösen. –

Antwort

0

Sie können alternativ den folgenden Code versuchen, der eine Kopie der Daten mit mehr "normalen" Zeilenumbrüchen erstellt.

with open('{}.clean'.format(fileToRead), 'w') as out_file: 
    with open(fileToRead, 'r') as in_file: 
     in_file_data = in_file.read().replace('#@#@#', '\n') 
     out_file.write(in_file_data) 

df = pandas.read_csv('{}.clean'.format(fileToRead), sep='~') 

aber wirklich, die Methode, die Sie derzeit verwenden, ist in Ordnung.

Außerdem müssen Sie, wie von @jonrsharpe angezeigt, Dateien nicht explizit schließen, wenn Sie sie mit der with-Anweisung öffnen. Dateien werden automatisch geschlossen, sobald der Code den Gültigkeitsbereich der with-Anweisung verlässt.

Verwandte Themen