2016-07-28 5 views
0

Ich habe eine TXT-Datei, die 214 Spalten hat (mit den Daten durch Leerzeichen getrennt) und etwa eine halbe Million Zeilen.Wie man eine TXT-Datei zu csv

Ich möchte txt zu csv konvertieren, und verwendet diesen Code:

import csv 

txt_file = r"myfile.txt" 
csv_file = r"myfile.csv" 

in_txt = csv.reader(open(txt_file, "r"), delimiter = " ", quotechar=" ") 
out_csv = csv.writer(open(csv_file, 'w', newline='\n'),delimiter=' ', quotechar=' ', quoting=csv.QUOTE_MINIMAL) 

out_csv.writerows(in_txt) 

Aber diese exportiert meine Daten in eine CSV-Datei, in der alle Spalten durch Leerzeichen nur getrennt sind, in der ersten A Spalte in Excel ... Ich möchte schließlich in der Lage sein, TXT zu CSV zu konvertieren und dabei die 10th-48th, 50-61, 65, 67, 68, 71-75, 77, 78, 80-88, 91, 93, 96-100, 102, 105-110, 112-114, 116-119, 122-126, 128-134, 136-140, 142-151, 153-155, 160-162, 165-169, 172-173, 175-177, 179-187, 189-196, 198, 199 & 201-214 Spalten zu entfernen. Ich bin sicher, das ist einfach, aber ziehe meine Haare aus, um herauszufinden, wie es geht

+0

Warum haben Sie das Trennzeichen als '‘ ‚' im 'csv.writer'? – mgilson

+0

Weil ich dachte, dass Trennzeichen fragte, was meine Daten trennte ... und es ist ein Leerzeichen ... so platzierte ich ein Leerzeichen :-D –

+0

Ahh ... Nein, für eine 'csv.writer', das ist, was Trennzeichen sein wird in der Ausgabe verwendet. Es erhält die Felder basierend auf dem, was Sie an "Writerow" oder "Writerows" übergeben (was für einen Vanilla-Writer einfach eine Liste oder Liste von Listen für 'Writerows' ist) – mgilson

Antwort

0

Sie müssen sich ändern

out_csv = csv.writer(open(csv_file, 'w', newline='\n'),delimiter=' ', quotechar=' ', quoting=csv.QUOTE_MINIMAL) 

zu

out_csv = csv.writer(open(csv_file, 'w', newline='\n'),delimiter=';', quotechar=' ', quoting=csv.QUOTE_MINIMAL) 

zu Laden, da Sie Ihre Schriftsteller ‚verwenden möchten; " als Trennzeichen in der generierten CSV-Datei. Zum Entfernen der Spalten sehe ich keinen anderen Weg, als über sie in einer for-Schleife zu iterieren und nur die aktuelle Spalte zu schreiben, wenn es nicht eine davon ist.

Eg .:

first_row = next(in_read);  
for x in range(0, length(first_row)): 
    if x not 10: 
     write() 
+0

Ich glaube, du suchst etwas wie 'enumerate' in der for-Schleife. – MisterMiyagi

1

Sie müssen das Trennzeichen der writer auf ein Komma setzen.

import csv 

txt_file = r"myfile.txt" 
csv_file = r"myfile.csv" 

in_txt = csv.reader(open(txt_file, "r"), delimiter = " ", quotechar=" ") 
out_csv = csv.writer(open(csv_file, 'w', newline='\n'),delimiter=',', quotechar=' ', quoting=csv.QUOTE_MINIMAL) 
                # changed this^

out_csv.writerows(in_txt) 

Zum Entfernen von Spalten können Sie sie einfach für jede Zeile wegwerfen. Ein Generator Ausdruck ermöglicht es Ihnen, jede Zeile zu ändern, ohne sie alle auf einmal

cleaned_column_iter = (line[0:10] + line [49:50] + line [62:65] for line in txt) 
           # add more elements as desired^
out_csv.writerows(cleaned_column_iter) 
+0

Danke MrMiyagi Ich denke, das hat funktioniert! Ich kann es nicht öffnen, weil es zu groß ist, so scheint es zu funktionieren, zumindest sollte ich in der Lage sein, einige Spalten jetzt zu löschen - Prost :) –

+0

@JacintaTonkin Siehe die beigefügte Notiz, wie man Spalten entfernt. – MisterMiyagi