2017-01-03 23 views
0

Ich habe viele CSV-Dateien, müssen alle Dateien in Schleife lesen und Dateinamen und alle Spalten (Header in Zeile 1) in einer Ausgabe schreiben Datei.Python CSV-Datei Spalten lesen und Dateiname und Spaltenname in eine CSV-Datei schreiben

Beispiel

Eingang CSV-Datei 1 (test1.csv)

Id, Name, Age, Location 
1, A, 25, India 

Eingang CSV-Datei 2 (test2.csv)

Id, ProductName 
1, ABC 

Output

test1.csv Id 
test1.csv Name 
test1.csv Age 
test1.csv Location 
test2.csv Id 
test2.csv ProductName 

Vielen Dank für Ihre Hilfe.

Update: Dieser Code funktioniert für diesen Zweck fein:

import os 
import csv 

ofile = open('D:\Anuj\Personal\OutputFile/AHS_File_Columns_Info.csv', 'w') 

directory = os.path.join('D:\Anuj\Personal\Python') 

for root, dirs, files in os.walk(directory): 
    for file in files: 
      fullfilepath = directory + "/" + file 
      with open(fullfilepath,'r') as f: 
       output = file +','+ f.readline() 
       ofile.write(output) 
+0

sollten Sie Ihren Code neu formatieren. –

+0

Dies sollte Ihnen die Hilfe geben, die Sie brauchen. https://stackoverflow.com/questions/3428532/how-to-import-a-csv-file-using-python-with-headers-intact-where-first-column- is – fuuman

Antwort

0

saubere Lösung mit csv Modul für und Lesen

  • offen Ausgabedatei zu schreiben und erstellen Sie eine csv.writer Instanz auf seinem Griff
  • öffnen jede Eingabedatei und erstellen Sie eine csv.reader Instanz auf ihrem Griff
  • erste Reihe erhält mit next auf dem csv.reader Iterator: Titel als Liste bekommt (mit einem kleinen Nachverarbeitung, die Räume zu entfernen)
  • Schreib Titel neben dem aktuellen Dateinamen in eine Schleife

Code:

import csv 

files=["test1.csv","test2.csv"] 
with open("output.tsv","w",newline='') as fw: 
    cw = csv.writer(fw,delimiter="\t") # output is tab delimited 
    for filename in files: 
     with open(filename,'r') as f: 
      cr = csv.reader(f) 
      # get title 
      for column_name in (x.strip() for x in next(cr)): 
       cw.writerow([filename,column_name]) 

Es gibt mehrere Vorteile csv Modul, das wichtigste ist, dasszitiertMehrzeilige Felder/Titel werden ordnungsgemäß verwaltet.

+0

Vielen Dank. Ich bekomme diesen Fehler: AttributeError: 'Modul' Objekt hat kein Attribut 'Writer' –

+0

Ich glaube, Sie haben Ihr Modul 'csv.py' aufgerufen. Benenne es um. –

0

Aber ich bin nicht sicher, ob ich Sie richtig verstehe.

import csv 
from typing import List 
from typing import Tuple 

TableType = List[List[str]] 


def load_csv_table(file_name: str) -> Tuple[List[str], TableType]: 
    with open(file_name) as csv_file: 
     csv_reader = csv.reader(csv_file, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL) 
     headers = next(csv_reader) 
     data_table = list(csv_reader) 
     return headers, data_table 


def save_csv_table(file_name: str, headers: List[str], data_table: TableType): 
    with open(file_name, 'w', newline='') as csv_file: 
     writer = csv.writer(csv_file, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL) 
     writer.writerow(headers) 
     for row in data_table: 
      writer.writerow(row) 


input_files = ['file1.csv', 'file2.csv', 'file3.csv'] 
new_table = [] 
new_headers = [] 
for file_name in input_files: 
    headers, data_table = load_csv_table(file_name) 
    if not new_headers: 
     new_headers = ['Source'] + headers 
    new_table.extend(([file_name] + line for line in data_table)) 
save_csv_table('output.csv', new_headers, new_table) 
+0

vielen Dank. Dieser Code funktioniert gut für mich: import os import csv ofile = open ('D: \ Anuj \ Personal \ Output/AHS_File_Columns_Info.csv', 'w') directory = os.path.join ('D: \ Anuj \ Personal \ Python ') für root, Verzeichnisse, Dateien in os.zu Fuß (Verzeichnis): für Datei in Dateien: fullfilepath = Verzeichnis + "/" + mit offenem (fullfilepath, 'r') Datei als f: output = Datei + '' + f.readline() ofile .write (output) –

0

Eine einfache Methode ist readline() auf dem Dateiobjekt zu verwenden:

files=["test1.csv","test2.csv"] 
for my_file in files: 
    with open(my_file,'r') as f: 
     print my_file, f.readline() 
+0

danke für Ihre Hilfe. –

Verwandte Themen