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

Donnerstag 7. Dezember 2006, 18:15

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
Moderator
Beiträge: 8483
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Donnerstag 7. Dezember 2006, 18:18

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)

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
BlackJack

Donnerstag 7. Dezember 2006, 18:56

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

Freitag 8. Dezember 2006, 08:48

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

Freitag 8. Dezember 2006, 08:58

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

Freitag 8. Dezember 2006, 10:20

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:

Freitag 8. Dezember 2006, 10:56

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