Seite 1 von 1
Strings ersetzen und neue .txt datei erstellen
Verfasst: Freitag 1. Juli 2016, 08:53
von Jens_J.
Hallo,
Ich benötige eure Hilfe: Ich möchte 33 .txt datein erstellen aus der Ursprungsdatei "sub-01-run-1.txt" wobei die strings subs und runs überall ersetzt werden.
Sowas habe ich versucht.
Code: Alles auswählen
import numpy
subs= ["01", "02", "03", "04", "05", "06", "09", "10","14", "14", "16"]
runs = [1, 2, 3,]
a = open("sub-01-run-1.txt", "r")
b = a.readlines()
for i in range(len(subs)):
a = open("sub-%s.txt" %subs[i+1], "w" )
a.write(b.replace("sub-01", "sub-%s" %subs[i])
a.close()
Ich denke das Problem wird offensichtlich: Wie nehme ich eine Datei ersetze Strings und erstelle daraus eine neue?
Re: Strings ersetzen und neue .txt datei erstellen
Verfasst: Freitag 1. Juli 2016, 09:01
von Sirius3
@Jens_J.: zu einer vollständigen Problembeschreibung gehört dazu, wo jetzt das konkrete Problem liegt. Was tut nicht so, wie Du es erwartest? Was ist statt dessen das Ergebnis? Gibt es eine Fehlermeldung?
Wieso importierst Du numpy? Wiese ist 01 in der Liste enthalten, obwohl Du das gar nicht eingesetzt haben willst? Warum ist "14" doppelt in der Liste?
"for i in range(len(subs))" ist ein Antipattern. Iteriere direkt über die Liste subs. Nenne Deine Variablen sinnvoll. Mit a oder b kann niemand etwas anfangen.
Re: Strings ersetzen und neue .txt datei erstellen
Verfasst: Freitag 1. Juli 2016, 09:28
von Jens_J.
Einige Dinge von denen ich glaubte sie später zu benötigen sind noch drinn. Da es aber bis dahin nicht funktionierte werden die nicht verwendet.
Also so habe ich es grade nochmal probiert. I
Code: Alles auswählen
subs= ["01", "02", "03", "04", "05", "06", "09", "10","14", "14", "16"]
a = open("sub-01-run-1.txt", "r")
for i in range(len(subs)):
c = open("sub-%s.txt" %subs[i+1], "w" )
c.write (open("sub-01-run-1.txt")
c.write(replace("sub-01", "sub-%s" %subs[i])
a.close()
c.close()
Re: Strings ersetzen und neue .txt datei erstellen
Verfasst: Freitag 1. Juli 2016, 10:00
von Sirius3
@Jens_J.: und bekommst jetzt einen SyntaxError. Programmieren ist nicht Raten. Man muß schon wissen, was jede Zeile macht.
Das "subs[i+1]" ist geraten, weil Du nicht willst, dass Deine ursprüngliche Datei überschrieben wird. Das macht aber überhaupt keinen Sinn, das Problem an dieser Stelle lösen zu wollen. Die richtige Lösung wäre 01 gar nicht in subs zu schreiben.
Aus dem Fehler Deines ersten Posts (AttributeError: 'list' object has no attribute 'replace') wird doch schonmal klar, dass b eine Liste ist, Du aber eigentlich einen String möchtest, um die Ersetzung zu machen.
Also versuch mal zu verstehen, was Du da schreibst, und wenn Du etwas nicht verstehst, konkret zu fragen und vor allem auch immer die Fehlermeldungen anzuschauen und zu posten.
Re: Strings ersetzen und neue .txt datei erstellen
Verfasst: Freitag 1. Juli 2016, 10:28
von Jens_J.
Ok, Sorry der Code war sinnlos. Weiß auch nicht was ich da gestern gedacht habe.
ich habs jetzt mal versucht und folgendes sollte mehr Sinn machen.
Code: Alles auswählen
subs= ["01", "02", "03", "04", "05", "06", "09", "10","14", "14", "16"]
for i in range(len(subs)):
a = open("sub-01-run-1.txt", "r")
b = a.read()
b.replace("sub-01", "sub-%s" %subs[i])
c = open("sub-%s.txt" %subs[i], "w" )
c.write(b)
a.close()
c.close()
Problem: b.replace, hier wird nichts replaced. Wenn ich den selben Befehl aber im command line eingebe, dann funktioniert es.
Re: Strings ersetzen und neue .txt datei erstellen
Verfasst: Freitag 1. Juli 2016, 11:56
von Sirius3
@Jens_J.: replace liefert ja auch einen neuen String zurück, und ändert den alten nicht (was prinzipiell nicht geht, weil Strings unveränderlich sind).
Code: Alles auswählen
subs = ["01", "02", "03", "04", "05", "06", "09", "10","14", "14", "16"]
with open("sub-01-run-1.txt", "r") as text:
text = text.read()
for sub in subs:
with open("sub-%s.txt" % sub, "w" ) as output:
output.write(text.replace("sub-01", "sub-%s" % sub))
Re: Strings ersetzen und neue .txt datei erstellen
Verfasst: Freitag 1. Juli 2016, 13:31
von Jens_J.
Vielen Dank. Das war hilfreich. Auch wenn nicht nicht ganz verstehe wieso es nicht funktionierte. aber folgender Code geht. Hab jetzt einfach die Zeile b.replace... weggelassen und bei c.write(b.replace(..) dazu geschrieben.
[codebox=pycon file=Unbenannt.txt]subs= ["01", "02", "03", "04", "05", "06", "09", "10","14", "14", "16"]
for i in range(len(subs)):
a = open("sub-01-run-1.txt", "r")
b = a.read()
c = open("sub-%s.txt" %subs, "w" )
c.write(b.replace("sub-01", "sub-%s" %subs))
a.close()
c.close()[/code]
Wofür genau ist dieses with / as nur damit die Datei von alleine geschlossen wird.
Ps: wie setzt ich den code inPython-Codebox-Tags. Damit das nicht immer jemand anderes für mich machen muss?
Re: Strings ersetzen und neue .txt datei erstellen
Verfasst: Dienstag 5. Juli 2016, 11:49
von sebastian0202
War das eine Schulaufgabe?
Hat der Lehrer sich deine Lösung angeschaut?