Strings in einer CSV ändern

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
BaseFloor
User
Beiträge: 25
Registriert: Donnerstag 16. November 2017, 11:06

Hi ich bin Anfänger und stehe bei einem simplen Code vor einem Problem. Ich möchte ein bestimmtes Wort aus einer CSV
ändern. Und möchte den Code so halten, dass man auch evtl mehrere Wörter ändert.
Kann mir jemand weiter helfen ?

Ich habe den Code soweit:


import csv

f = open('C:\\Users\\Continental\\Desktop\\Replace_Test\\Testreplace.csv')
csv_f = csv.reader(f)

g = open('C:\\Users\\Continental\\Desktop\\Replace_Test\\Testreplace.csv')
csv_g = csv.writer(g)


findlist = ['zu ersetztendes Wort']
replacelist = ['Ersatz']


#der Funktionscode ?:
def findReplace(find,replace):
s = f.read()
for item, replacement in zip(findlist,replacelist):
s = s.replace(item,replacement)
g.write(s)

for row in csv_f:
print(row)

f.close()
g.close()
Benutzeravatar
noisefloor
User
Beiträge: 3853
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

wie ist denn dein konkretes Problem? Du arbeitest doch schon mit Listen, in die du mehrere Wörter eintragen könntest.

Problematisch könnte nur sein, dass du die gleiche Datei zum Lesen und Schreiben öffnest. Müsstest du mal ausprobieren, ob es da unerwünschte Seiteeffekte gibt.

Gruß, noisefloor
__deets__
User
Beiträge: 14522
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das mit einer Datei gleichzeitig zum lesen & schreiben geht 100% in die Hose. Das solltest du nacheinander machen. Ggf in eine temporäre Datei schreiben und dann umbenennen, oder einfach alles in den Speicher lesen.
Sirius3
User
Beiträge: 17737
Registriert: Sonntag 21. Oktober 2012, 17:20

@BaseFloor: Du hast schon Code. Was gefällt Dir daran nicht? Tut er das, was Du erwartest? Wenn nein, was passiert?

Generell: Funktionen sollten alles was sie brauchen per Parameter bekommen. In findReplace fallen `f` und `g` vom Himmel. Das sind auch keine guten Namen.

Du schreibst von einer csv-Datei. Welche Relevanz hat das? Willst Du nur ganze Zellen ersetzen oder wirklich Wörter?

`g` ist eine Datei, die zum Lesen geöffnet wurde, da kann man nichts reinschreiben. findReplace sollte `find_replace` oder gleich `replace_words` heißen.
BaseFloor
User
Beiträge: 25
Registriert: Donnerstag 16. November 2017, 11:06

ich möchte strings aus einer CSV finden und dann ersetzten. die ersetzte CSV-Datei soll einen neuen Namen bekommen.
Wie würde denn am besten der Code aussehen ?

a) um einen String zu suchen und zu ersetzen

b) mehrere strings zu ersetzen ?

kann mir da jmd helfen ?
Sirius3
User
Beiträge: 17737
Registriert: Sonntag 21. Oktober 2012, 17:20

@BaseFloor: Willst Du nur ganze Zellen ersetzen oder Dinge innerhalb von Zellen?

An welcher Stelle kommst Du nicht weiter? Was ist Deine konkrete Frage?
BaseFloor
User
Beiträge: 25
Registriert: Donnerstag 16. November 2017, 11:06

ich möchte nur mindestens einen String innerhalb der Zeilen ändern.
Ich glaube der Code dafür an sich ist nur wenige Zeilen lang.

Meine konkrete Frage wäre: ob jmd einen gesamten Code Vorschlag dafür hätte.
Sirius3
User
Beiträge: 17737
Registriert: Sonntag 21. Oktober 2012, 17:20

@BaseFloor: nein, das hat niemand, weil das hier kein kostenloser Programmierservice ist. Du mußt Dich selbst mit dem Problem auseinandersetzen, es in verschiedene Teilaufgaben aufteilen (ein guter Anfang ist immer die Aufteilung in Eingabe, Verarbeitung und Ausgabe). Wenn Du wo nicht weiter kommst, konkrete Frage stellen, mit Beispiel, Fehlermeldung, etc.
Benutzeravatar
kbr
User
Beiträge: 1487
Registriert: Mittwoch 15. Oktober 2008, 09:27

@BaseFloor: Deine konkrete Frage ist, ob jemand das für Dich schreiben möchte. Kann man ja versuchen. Falls Du es selbst können möchtest, lese erst einmal Text aus einer Datei ein und gebe diesen wieder aus. Dann versuche den auszugebenden Text zu ändern. Wenn das klappt, schreibe ihn in eine neue Datei. So kommst Du voran.
BaseFloor
User
Beiträge: 25
Registriert: Donnerstag 16. November 2017, 11:06

okay
ich habe den Code erstmal reduziert:

import csv
f = open('path','r')
content = csv_reader(f)

for row in content:
print(row)

f.close()

Damit zeige ich den Inhalt schonmal an.
meine konkrete Frage ist dann erstmal:
Wie kann ich in der Anzeige einen bestimmten String ersetzen?
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Generell kann man eine Datei nicht verändern. Du liest einfach die existierende ein und erzeugst eine neue mit den Änderungen die du haben willst.
Sirius3
User
Beiträge: 17737
Registriert: Sonntag 21. Oktober 2012, 17:20

@BaseFloor: wie man Strings ersetzt, weißt Du schon: `replace`. Da row eine Liste ist, mußt Du replace auf jedes Element der Liste anwenden.
Antworten