Seite 1 von 1

mit listen rechen!

Verfasst: Donnerstag 7. Dezember 2006, 18:15
von pythoniser
Bin ein Anfänger in Sache Python-Programmierung. Ich möchte ein paar Zeilen aus einer .txt Datei in einer Liste einlesen und mit diesen zahlen rechnen, also z.B. 3.5 multiplizieren. Jedoch kommt dann einen Error, welcher mir sagt, dass dies nur für String oder number geht. ????? Könnte mir bitte jemand helfen? oder ist das nicht möglich, zahlen, welche in listen gespeichert sind, zu verändern?

Code: Alles auswählen

datei=open("filename.txt","r+")  #zum lesen und schreiben öffnen
guck=[]   # einen liste erzeugen
guck=datei.readlines()   #werte der datei einlesen in die liste
[3.5*x for x in guck]  #alle Zahlen in guck mit dem Wert 3.5 multiplizieren  --> Error!
Helft mir bitte! Danke schon im Voraus!

Verfasst: Donnerstag 7. Dezember 2006, 18:18
von jens
Taste dich doch erstmal langsam herran ;)

Mach mal das:

Code: Alles auswählen

datei=file("filename.txt","r+")
lines = datei.readlines()
datei.close()

print lines

for line in lines:
   print line, type(line)

Re: mit listen rechen!

Verfasst: Donnerstag 7. Dezember 2006, 18:56
von BlackJack
pythoniser hat geschrieben:Jedoch kommt dann einen Error, welcher mir sagt, dass dies nur für String oder number geht. ?????
Fehlermeldungen am besten immer genau so angeben wie sie von Python ausgegeben werden. Du dürftest so etwas bekommen haben:

Code: Alles auswählen

TypeError: can't multiply sequence by non-int

Code: Alles auswählen

datei=open("filename.txt","r+")  #zum lesen und schreiben öffnen
guck=[]   # einen liste erzeugen
guck=datei.readlines()   #werte der datei einlesen in die liste
Bist Du sicher das Du die Datei auch zum Schreiben öffnen willst?

Die zweite Zeile ist überflüssig, Du machst nie etwas mit der leeren Liste. Gleich eine Zeile später wird die schon wieder "weggeworfen".

Verfasst: Freitag 8. Dezember 2006, 08:48
von Ene Uran
Einfach die strings in der liste zu integers aendern:

Code: Alles auswählen

# zum lesen und schreiben öffnen 
datei = open("filename.txt","r+")

# lines der datei einlesen in die liste, das sind strings!
guck = datei.readlines()   

# wandle alle strings in guck zu integers, dann mit 3.5 multiplizieren
guck_mult = [3.5*int(x) for x in guck]  

Verfasst: Freitag 8. Dezember 2006, 08:58
von pythoniser
Danke für eure Beiträge! Werd's gleich mal ausprobieren. Wenns nicht geht, meld ich mich wieder :-)

Verfasst: Freitag 8. Dezember 2006, 10:20
von pythoniser
Das nächste Problem: meine Zahlen in der eingelesenen Datei sind nicht integer sondern Fliesskommazahlen. Ich möchte diese aber nicht in Integerzahlen umwandeln, da ich die Dezimalstellen brauche. Würde also auch folgendes gehen?

Code: Alles auswählen

guck_mult=[3.5*float(x) for x in guck]
Und noch eine Frage: Habe ja mit r+ Lese und SchreibModus eingestellt. Wenn ich diese obige rechnung ausführe, werden somit die alten Zahlen durch die Neuen überschrieben?
Das wäre eigentlich mein Ziel.

Verfasst: Freitag 8. Dezember 2006, 10:56
von CM
Hoi,

1. Ja. Aber so etwas kannst Du auch einfach ausprobieren.
2. Nein. Du müßtest schon explizit in die Datei schreiben. Aber ich empfehle Dir nicht in dieselbe Datei zu schreiben, sondern in eine neue Datei - sonst machst Du nämlich einen Programmierfehler und Deine Daten sind im schlimmsten Fall futsch.

Gruß,
Christian