/ / Über eine CSV-Datei iterieren Python - Python, Regex, CSV, Iterator

Iterieren über eine CSV-Datei Python - Python, Regex, Csv, Iterator

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 № 1

Sie 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.