CSV importieren: Entfernen Sie den Dateinamen aus den Spaltennamen in der ersten Zeile

Dec 01 2020

Ich benutze Python 3.5. Ich habe mehrere CSV-Dateien:

Die CSV-Dateien werden nach einer festen Struktur benannt. Sie haben ein festes Präfix (immer das gleiche) sowie einen variierenden Dateinamen:

099_2019_01_01_filename1.csv
099_2019_01_01_filename2.csv

Meine ursprünglichen CSV-Dateien sehen folgendermaßen aus:

filename1-Streetname filename1-ZIPCODE
TEXT TEXT
TEXT TEXT
TEXT TEXT
TEXT TEXT
TEXT TEXT
TEXT TEXT
Street1 2012932
Street2 3023923

filename2-Name filename2-Phone
TEXT TEXT
TEXT TEXT
TEXT TEXT
TEXT TEXT
TEXT TEXT
TEXT TEXT
Name1 2012932
Name2 3023923

Ich bearbeite diese Dateien mit dem folgenden Code (ich lese die CSV-Dateien aus einem Quellordner und schreibe sie in einen Zielordner. Ich überspringe bestimmte Zeilen, da ich diese Informationen nicht einschließen möchte):

Ich schneide die TEXT-Zeilen ab, da ich sie nicht brauche:

import csv
    
skiprows = (1,2,3,4,5,6)
for file in os.listdir(sourcefolder):
    with open(os.path.join(sourcefolder,file)) as fp_in:
        reader = csv.reader(fp_in, delimiter=';')
        rows = [row for i, row in enumerate(reader) if i not in skiprows]
        with open(os.path.join(destinationfolder,file), 'w', newline='') as fp_out:
            writer = csv.writer(fp_out)
            writer.writerows(rows)

(dieser Code funktioniert) gibt

filename1-Streetname filename1-ZIPCODE
Street1 2012932
Street2 3023923

filename2-Name filename2-Phone
Name1 2012932
Name2 3023923

Die erste Zeile enthält den Header. In den Headernamen steht immer der Dateiname (jedoch ohne das Präfix 099_2019_01_01_) plus ein "-". Der Dateiname mit der Endung .csv fehlt. Ich möchte diesen "Dateinamen-" für jede CSV-Datei entfernen.

Der Kernteil besteht nun darin, die erste Zeile abzurufen und nur für diese Zeile einen Austausch durchzuführen. Ich muss das Präfix und die CSV-Datei abschneiden und dann einen allgemeinen Austausch durchführen. Der erste Ersatz könnte ungefähr so ​​aussehen:

  1. Entweder könnte ich mit einer Funktion beginnen, um die ersten n Zeichen abzuschneiden, da die Länge fest ist, oder
  2. Nach dieser Lösung einfach verwendenstring.removeprefix('099_2019_01_01_')

Da ich Python 3.5 habe, kann ich removeprefix nicht verwenden, daher versuche ich, es einfach zu ersetzen.

string.replace ("099_2019_01_01_", "")

Dann muss ich die .csv entfernen, was einfach ist:

string.replace(".csv","")

Ich habe das zusammengestellt und ich bekomme (string.replace("099_2019_01_01_","")).replace(".csv",""). (Außerdem muss am Ende auch das "-" entfernt werden, siehe im folgenden Code). Ich bin mir nicht sicher, ob das funktioniert.

Mein Hauptproblem ist jetzt für diesen CSV-Importcode, dass ich nicht weiß, wie ich nur die erste Zeile beim Lesen / Schreiben der CSV bearbeiten kann. Ich möchte dies also nur in der ersten Zeile ersetzen. Ich habe so etwas versucht:

import csv
    
skiprows = (1,2,3,4,5,6)
for file in os.listdir(sourcefolder):
    with open(os.path.join(sourcefolder,file)) as fp_in:
        reader = csv.reader(fp_in, delimiter=';')
        rows = [row for i, row in enumerate(reader) if i not in skiprows]
        with open(os.path.join(destinationfolder,file), 'w', newline='') as fp_out:
            writer = csv.writer(fp_out)
            rows[0].replace((file.replace("099_2019_01_01_","")).replace(".csv","")+"-","")
            writer.writerows(rows)

Dies gibt einen Fehler aus, da die Idee mit Zeilen [0] nicht funktioniert. Wie kann ich das machen?

(Ich bin mir nicht sicher, ob ich versuchen sollte, dieses Ersetzen in den Code aufzunehmen oder in einen zweiten Code einzufügen, der nach dem ersten Code ausgeführt wird. Dann würde ich jedoch wieder CSV-Dateien lesen und schreiben, nehme ich an. Also denke ich, dass es so wäre Am effizientesten ist es, es in diesen Code zu implementieren. Andernfalls muss ich jede Datei erneut öffnen, ändern und speichern. Wenn es jedoch nicht möglich ist, sie in diesen Code aufzunehmen, wäre ich auch mit einem Code einverstanden, der eigenständig und ausgeführt wird Nur das Ersetzen unter der Annahme, dass die CSV-Datei die Zeilen 0 als Header hat und dann die Daten kommen.)

Bitte beachten Sie, dass ich diesen Weg mit CSV gehen und keine Pandas verwenden möchte.

EDIT: Am Ende sollten die CSV-Dateien folgendermaßen aussehen:

Streetname ZIPCode
Street1 9999
Street2 9848

Name Phone
Name1 23421
Name2 23232

Antworten

1 IoaTzimas Dec 01 2020 at 13:58

Versuchen Sie dies durch Ersetzen:

rows[0].replace((file.replace("099_2019_01_01_","")).replace(".csv","")+"-","")

Durch dies in Ihrem Code:

x=file.replace('099_2019_01_01_','').replace('.csv', '')
rows[0]=[i.replace(x+'-', '') for i in rows[0]]