mit listen rechen!

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
pythoniser
User
Beiträge: 9
Registriert: Donnerstag 7. Dezember 2006, 18:04

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!
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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)

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
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".
Ene Uran
User
Beiträge: 125
Registriert: Sonntag 17. September 2006, 20:14
Wohnort: Hollywood

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]  
Atomkraftwerkaktienbesitzer
pythoniser
User
Beiträge: 9
Registriert: Donnerstag 7. Dezember 2006, 18:04

Danke für eure Beiträge! Werd's gleich mal ausprobieren. Wenns nicht geht, meld ich mich wieder :-)
pythoniser
User
Beiträge: 9
Registriert: Donnerstag 7. Dezember 2006, 18:04

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.
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

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
Antworten