Ich habe eine CSV-Datei, die so aussieht
a,b,c
d1,g4,4m
t,35,6y
mm,5,m
Ich versuche, alle m "s und y" s, denen eine Zahl vorangestellt ist, durch "month" und "year" zu ersetzen. Ich verwende das folgende Skript.
import re,csv
out = open ("out.csv", "wb")
file = "in.csv"
with open(file, "r") as f:
reader = csv.reader(f)
for ss in reader:
s = str(ss)
month_pair = (re.compile("(ds*)m"), "months")
year_pair = (re.compile("(ds*)y"), "years")
def substitute(s, pairs):
for (pattern, substitution) in pairs:
match = pattern.search(s)
if match:
s = pattern.sub(match.group(1)+substitution, s)
return s
pairs = [month_pair, year_pair]
print (substitute(s, pairs))
Es wird ersetzt, aber nur in der letzten Zeile, wobei die vorherigen ignoriert werden. Wie kann ich es über alle Zeilen iterieren lassen und in eine andere CSV-Datei schreiben?
Antworten:
1 für die Antwort № 1Sie können positiv verwenden Schau hinter dich :
>>> re.sub(r"(?<=d)m","months",s)
"a,b,cnd1,g4,4monthsnt,35,6ynmm,5,m"
>>> re.sub(r"(?<=d)y","years",s)
"a,b,cnd1,g4,4mnt,35,6yearsnmm,5,m"
1 für die Antwort № 2
In dieser Zeile
print (substitute(s, pairs))
deine Variable s
ist nur die letzte Zeile in Ihrer Datei. Beachten Sie, wie Sie aktualisieren s
in Ihrer Datei lesen, um die aktuelle Zeile zu sein.
Lösungen (eine auswählen):
- Du könntest es mit einem anderen versuchen
for
-Schleife, um alle Zeilen zu durchlaufen. - Oder Verschieben Sie die Ersetzung in die
for
-loop wo du die Zeilen der Datei liest. Das ist definitiv die bessere Lösung!
Sie können ganz einfach nachschlagen, wie Sie eine neue Datei schreiben oder die Datei ändern, an der Sie arbeiten.