CSV importieren: Entfernen Sie den Dateinamen aus den Spaltennamen in der ersten Zeile
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:
- Entweder könnte ich mit einer Funktion beginnen, um die ersten n Zeichen abzuschneiden, da die Länge fest ist, oder
- Nach dieser Lösung einfach verwenden
string.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
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]]