Seite 1 von 1
Schreiben von 2 Listen in eine Datei
Verfasst: Freitag 30. August 2013, 14:23
von Melody
Hallo an alle,
ich habe 2 Listen, die ich in eine txt-Datei schreiben will.
Die Listen könnten zum Beispiel folgendermaßen aussehen:
Der Inhalt der txt-Datei soll dann folgendermaßen aussehen:
1 4
2 5
3 6
Wie man in eine Datei schreibt, verstehe ich, aber alle Versuche den Inhalt von zwei Listen nebeneinander in eine Datei zu schreiben, sind bisher gescheitert, weshalb ich hier diese Frage stelle.
Danke schon mal für eure Hilfe!
Re: Schreiben von 2 Listen in eine Datei
Verfasst: Freitag 30. August 2013, 14:25
von BlackJack
@Melody: Du suchst die `zip()`-Funktion beziehungsweise `itertools.izip()`.
Re: Schreiben von 2 Listen in eine Datei
Verfasst: Freitag 30. August 2013, 14:36
von Melody
Was ist der Unterschied zwischen der zip Funktion und der itertools.izip Funktion?
Die zip Funktion habe ich bereits vorher angewendet, aber dann ergibt sich beim Schreiben in die txt-Datei das Problem, dass die Tupel mitreingeschrieben werden. Der Code...
Code: Alles auswählen
a=(1, 2, 3)
b=(4, 5, 6)
c=zip(a,b)
Test=open("Test.txt", "w")
for i in c:
i=str(i)
Test.write(i +"\n")
Test.close()
...führt also zu folgendem Inhalt der txt-Datei:
(1, 4)
(2, 5)
(3, 6)
Ich brauche den Inhalt ohne Klammern und Kommas, vielleicht gibt es ja noch eine Möglichkeit die txt-Datei nach dem Schreiben zu verändern?
Re: Schreiben von 2 Listen in eine Datei
Verfasst: Freitag 30. August 2013, 14:46
von /me
Melody hat geschrieben:Was ist der Unterschied zwischen der zip Funktion und der itertools.izip Funktion?
zip liefert eine Liste. izip liefert einen Iterator. Dort werden die Elemente on-the-fly erstellt. Das kommt dem Speicherbedarf und vielleicht auch dem Laufzeitverhalten entgegen, führt aber dazu, dass das Ergebnis nur einmal durchlaufen werden kann.
Code: Alles auswählen
>>> x = ['A', 'B']
>>> y = [1, 2]
>>> data = zip(x, y)
>>> for value in data:
print value
('A', 1)
('B', 2)
>>> for value in data:
print value
('A', 1)
('B', 2)
>>> data = itertools.izip(x, y)
>>> for value in data:
print value
('A', 1)
('B', 2)
>>> for value in data:
print value
>>>
Melody hat geschrieben:Ich brauche den Inhalt ohne Klammern und Kommas, vielleicht gibt es ja noch eine Möglichkeit die txt-Datei nach dem Schreiben zu verändern?
Die Datei nachträglich zu verändern ist eine unpraktische Lösung. Es wäre besser, die Daten direkt korrekt zu schreiben.
Du solltest dich daher nicht auf die von Python bereitgestellte Repräsentation der Daten verlassen, sondern die Aufbereitung selber vornehmen. Verwende einfach die Einzelwerte.
Code: Alles auswählen
>>> print element
(23, 42)
>>> print element[0], element[1]
23 42
Re: Schreiben von 2 Listen in eine Datei
Verfasst: Freitag 30. August 2013, 15:06
von Melody
Danke für den Tipp, nach diesem Prinzip hat es jetzt funktioniert:
Code: Alles auswählen
Tabelle1=[1, 2, 3]
Tabelle2=[4, 5, 6]
Tabelle3=zip(Tabelle1, Tabelle2)
Tabelle4=[]
for i in Tabelle3:
for k in range(1):
a=str(i[0]) + " " + str(i[1])
Tabelle4.append(a)
Test=open("Test.txt", "w")
for i in Tabelle4:
i=str(i)
Test.write(i +"\n")
Test.close()
Re: Schreiben von 2 Listen in eine Datei
Verfasst: Freitag 30. August 2013, 16:17
von Sirius3
Hallo Melody,
vergiss am besten, dass es soetwas wie »str« gibt, und dass man Strings mit »+« zusammenstückeln kann. Der bessere Weg ist es, Stringformatierungen (per ».format« oder »%« zu benutzen. Das ist effizienter, besser lesbar und flexibler.
Zum Beispiel:
Code: Alles auswählen
from itertools import izip
Tabelle1=[1, 2, 3]
Tabelle2=[4, 5, 6]
with open("test.text", "w") as output:
output.writelines("{0:d} {1:.4f}\n".format(a,b) for a,b in izip(Tabelle1, Tabelle2))
Re: Schreiben von 2 Listen in eine Datei
Verfasst: Freitag 30. August 2013, 17:31
von Hyperion
Man kann auch das ``csv``-Modul dafür nehmen:
Code: Alles auswählen
import csv
from itertools import izip
Tabelle1=[1, 2, 3]
Tabelle2=[4, 5, 6]
with open("text.csv", "wb") as output:
csv.writer(output, delimiter=" ").writerows(pair for pair in izip(
Tabelle1, Tabelle2))
Re: Schreiben von 2 Listen in eine Datei
Verfasst: Freitag 30. August 2013, 17:39
von Sirius3
@Hyperion: wobei die »for«-Schleife aus rein ästhetischen Gründen Verwendung findet.

Re: Schreiben von 2 Listen in eine Datei
Verfasst: Freitag 30. August 2013, 17:42
von Hyperion
Sirius3 hat geschrieben:@Hyperion: wobei die »for«-Schleife aus rein ästhetischen Gründen Verwendung findet.

Latürnich
Ich wollte den OP nur nicht verwirren
...
na gut, hier die Korrektur:
Code: Alles auswählen
with open("text.csv", "wb") as output:
csv.writer(output, delimiter=" ").writerows(izip(Tabelle1, Tabelle2))
Re: Schreiben von 2 Listen in eine Datei
Verfasst: Samstag 31. August 2013, 12:32
von Melody
Dankeschön für die weiteren Antworten und Tipps

!