2016-05-11 3 views
0

Ich habe eine CSV-Datei (tab begrenzt), dessen Abtastformat ist beim Lesen:Ausgabe Anzahl n von Werten aus einer CSV-Datei-Header in Python

"col1 col2 col3 col4 col5" 
"15 AMC 0.0 0.0 0.0" 

Jetzt habe ich eine variable n die die Anzahl der Werte bezeichnet das möchte ich aus dem Header dieser CSV-Datei lesen. Also, wenn n = 3 so möchte ich die ersten 3 Werte in der Kopfzeile lesen und eine Liste wie ['col1','col2','col3'] bilden. Ich schrieb diesen Code Tabulator getrennte CSV-Datei zu lesen, aber ich einige Frage mit:

n = 3 # number of values to be extracted from header of csv.Will vary 

file = open('file1.csv','rU') 
read = csv.reader(file,delimiter='\t') 

row_number = 0 

for row in read: 
    if row_number == 0: 
     header = row 
     break 

Wenn ich print header bekomme ich ['col1\tcol2\tcol3\tcol4\tcol5']. Wie kann ich die n Anzahl der Werte aus dem Header der CSV-Datei extrahieren?

+3

Dies bedeutet, dass Ihre Datei nicht Tabulator getrennt. –

+1

Wenn diese Zitate '' 'tatsächlich in der Datei sind, werden sie die gesamte Zeile als eine Textspalte angeben. Doppelte Anführungszeichen sind der Standard' quotechar'. – schwobaseggl

+0

@BurhanKhalid Aber Sie können die Tabs '\ t' sehen, wenn das OP druckt 'header' – schwobaseggl

Antwort

2

Ich gehe davon aus, dass die doppelten Anführungszeichen (") in der Datei sind, wie Sie sie zeigen, so dass sie die ganze Zeile zitieren und Trennzeichen in Anführungszeichen werden ignoriert. Sie müßten diese Anführungszeichen Streifen vor den Linien zum csv Leser Gabe:

file = open('file1.csv','rU') 

lines = [line.strip().strip('"') for line in file] # strip white space, too, to be sure 

read = csv.reader(lines, delimiter='\t') 
# any iterable producing strings will do in the reader constructor 
+1

Ich habe nicht bemerkt, dass '' 'die ganzen Zeilenfolgen macht. Es funktioniert jetzt. –

-1

Meine Vermutung ist, dass es nicht geteilt wird, weil es nicht durch Tab, sondern durch 4 Leerzeichen begrenzt ist. Um nur eine Menge von n zu erhalten, schreibt man Zeile [: n]. Versuchen Sie folgendes:

n = 3 # number of values to be extracted from header of csv.Will vary 

file = open('file1.csv','rU') 
read = csv.reader(file,delimiter=' '*4) 

row_number = 0 

for row in read: 
    if row_number == 0: 
     header = row[:n] 
     break 
+0

drucken Die Frage enthält überzeugende Beweise, dass es tatsächlich Registerkarten zwischen die Wörter, nicht die Leerzeichen, und es zeigt das eigentliche Problem, wie es von @schwobaseggl entdeckt wurde. –

0

Was haben Sie nicht eine CSV-Datei, sondern einfach eine Datei mit zwei Zeilen, die notiert sind. Der Versuch, dies mit dem Modul csv zu analysieren, führt nur zu Fehlern.

Stattdessen tun:

n = 3 

with open('file1.csv') as f 
    header = next(f)[1:-1].split('') 
    print('Header: {}'.format(header)) 
    print('First {} columns of header: {}'.format(n, header[:n])) 
    for line in f: 
     row = line[1:-1].split('') 
     print('Complete row: {}'.format(row)) 
     print('First {} columns: {}'.format(n, row[:n])) 
Verwandte Themen