2016-07-22 3 views
0

Ich habe eine Liste von tsv-Dateien, wo ich suchen, um Spaltenüberschriften für alle Dateien zu greifen.Grab-Header aus mehreren TSV/CSV-Dateien

Momentan liest dieses Snippet nur 1 Datei, wo ich eine Liste von Dateien habe, die geparst werden müssen.

dir_path = os.path.abspath('reference/') 
files = os.listdir(dir_path) 

Die Namen der Dateien sind in files aufgeführt. Wie durchlaufe ich die Liste der Dateien und nehme nur die Spaltenüberschriften für jede Datei?

Antwort

1

Ich versuche, dies und es funktioniert.

import os 
import csv 

dir_path = os.path.abspath('reference/') 
files = os.listdir(dir_path) 


for f in files: 
    with open(dir_path +'/'+f, 'rU') as file: 
     reader = csv.reader(file) 
     row1 = next(reader) 
     print row1 
+0

Beachten Sie, dass dies Unterordner nicht berücksichtigt und versuchen wird, sie als Datei zu öffnen. –

+0

Ja, danke Kristof. –

+0

Werke. Jetzt möchte ich die Ergebnisse mit dem Namen der Datei als Schlüssel und den Spaltenüberschriften als Werte speichern. Wäre es am besten, ein Wörterbuch zu erstellen? oder eine Liste? row1.append [f] = next (reader) als Liste funktioniert nicht ... – nlr25

1

Die Variable files in Ihrem Code ist der Inhalt des Ordners reference, was alle Dateien und Unterordner des Ordners bedeutet. Sie werden in einer Liste von Zeichenfolgen zurückgegeben, die nur den Namen der Datei oder des Unterordners enthalten. Dies bedeutet, dass Sie den Pfad selbst voranstellen müssen.

Beispiel:

dir_path = os.path.abspath('reference/') 
files = os.listdir(dir_path) 

for file in files: 
    # Skip non-files 
    if not os.path.isfile(file): 
     continue 

    with open(os.path.join(dir_path, file), 'rU') as f: 
     reader = csv.reader(f) 
     row1 = next(reader) 

Eine Alternative mit dem pathlib Modul:

for file in Path('reference/').glob('*'): 
    if not file.is_file(): 
     continue 

    with open(str(file.resolve()), 'rU') as f: 
     reader = csv.reader(f) 
     row1 = next(reader) 

Würden Sie nicht besser dran, die erste Zeile jeder dieser Dateien in das Lesen, um sie zu einer Liste angehängt und dann an csvreader weiterleiten?

Beispiel:

lines = [] 

with open(str(file.resolve()), 'rU') as f: 
    lines.append(f.readline()) 

reader = csv.reader(lines) 
for row in reader: 
    # whatever you want to do with the parsed lines