2016-08-09 5 views
1
nf=open(Output_File,'w+') 
with open(Input_File,'read') as f: 
    for row in f: 
     Current_line = str(row) 
     Reformated_line=str(','.join(Current_line.split('|')[1:-1])) 
     nf.write(Reformated_line+ "\n") 

Ich versuche Input file zu lesen, die in der Tabelle Format ist und es in einer CSV-Datei schreiben, aber meine Ausgabe enthält eine letzte auch leere Zeile. Wie kann ich die letzte leere Zeile in CSV entfernen?Entfernen Sie die letzte in CSV-Datei leere Zeile

+1

Asides: Gibt es einen Grund, warum Sie mit 'with' öffnen eine Datei, die andere aber nicht? Warum nennst du 'str (row)'? Da 'row' bereits ein' str' ist, scheint dies nichts Nützliches zu bewirken. –

Antwort

1

Es klingt wie Sie eine leere Zeile in der Eingabedatei haben. Aus Ihren Kommentaren haben Sie tatsächlich eine nicht leere Zeile, die keine | Zeichen enthält. In jedem Fall ist es einfach genug, nach einer leeren Ergebniszeile zu suchen.

Versuchen Sie folgendes:

#UNTESTED 
nf=open(Output_File,'w+') 
with open(Input_File,'read') as f: 
    for row in f: 
     Current_line = str(row) 
     Reformated_line=str(','.join(Current_line.split('|')[1:-1])) 
     if Reformatted_line: 
      nf.write(Reformated_line+ "\n") 

Andere Anmerkungen:

  • Sie with konsequent nutzen sollten. Öffnen Sie beide Dateien auf die gleiche Weise.
  • str(row) ist ein No-Op. row ist schon eine str.
  • str(','.join(...)) ist ähnlich redundant.
  • open(..., 'read') ist keine gültige Verwendung des Modus-Parameters zu open(). Sie sollten r verwenden oder den Parameter ganz weglassen.
  • Ich möchte keine neuen Namen einführen, wenn ich das Format der vorhandenen Daten ändere. Das heißt, ich bevorzuge row = row.split() über Reformatted_line = row.split().

Hier ist eine Version, die diese und andere Vorschläge enthält:

with open(Input_File) as inf, open(Output_File, 'w+') as outf: 
    for row in inf: 
     row = ','.join(row.split('|')[1:-1]) 
     if row: 
      outf.write(row + "\n") 
+0

Danke Rob. Bin neu in Python. Ich habe das Skript nach deinem Vorschlag geändert. Aber ich bekomme immer noch die leere Zeile in der Ausgabe. Es gibt keine leere Zeile in meiner Eingabe. Aber unten sieht meine letzte Zeile in Eingabe wie folgt aus: --------------------------- –

+0

Mein zweites Beispiel oben sollte auf Ihrer Eingabe korrekt funktionieren . Wenn dies nicht der Fall ist, bearbeiten Sie Ihre Frage bitte mit einem kurzen ** vollständigen ** Beispielprogramm, das das Problem veranschaulicht. Fügen Sie ggf. eine Beispieleingabe hinzu. Siehe [mcve] für weitere Informationen. –

+0

@Prashanth_Ramanathan - Ich habe mein erstes Beispiel aktualisiert, um die von Ihnen beschriebene Eingabe zu behandeln. –

0

nur eine Frage der Umordnung der Dinge ein wenig:

first = True 
with open(Input_File,'read') as f, open(Output_File,'w+') as nf: 
    for row in f: 
     Current_line = str(row) 
     Reformated_line=str(','.join(Current_line.split('|')[1:-1])) 
     if not first: 
      nf.write('\n') 
     else: 
      first = False 
     nf.write(Reformated_line) 
+1

Sie können mehrere Dateien in einer einzigen 'with' Anweisung öffnen. Andernfalls vergessen Sie nicht, 'nf' zu schließen –

Verwandte Themen