Seite 1 von 1
Listen in Datei speichern
Verfasst: Samstag 8. April 2006, 07:51
von lumbes
Hallo!
Nachdem ich jetzt ne Weile in den Foren gesucht, mein Problem aber nicht gefunden habe, hier mein Problem:
Ich habe zwei gleich lange Listen, die ich zu einer neuen Liste verknüpfen moechte. Das funktioniert auch. Wenn ich diese neue Liste in eine Datei schreibe, erhalte ich jedoch folgendes Muster:
100:
200
134:
456
Ich brauche die Daten aber jeweils in einer Zeile, also so:
100: 200
134: 456
Mein Listenausdruck sieht folgendermaßen aus:
['100: \n', '200\n']
Hier der entsprechende code:
Code: Alles auswählen
global summe
fz=file("C:\RiemDaten\DatenRiem\zwischen.txt", "r")
fw=file("C:\RiemDaten\DatenRiem\wohnklein.txt", "r")
regexB=re.compile("(\d+)")
sum = 0
for b in fz.readlines():
sum += 1
resultB=regexB.split(b,7) #x1=resultB[1] y1=resultB[3] x2=resultB[5] y2=resultB[7]
for m in fw.readlines():
resultC=regexB.split(m,9) #strid=resultC[1] xmin=resultC[3] ymin=resultC[5] xmax=resultC[7] ymax=resultC[9]
if (((resultB[1] >= resultC[3]) and (resultB[1] < resultC[7])) and ((resultB[3] >= resultC[5]) and (resultB[3] < resultC[9]))):
fileInA.write((resultC[1])+': '+'\n')
if (((resultB[5] >= resultC[3]) and (resultB[5] < resultC[7])) and ((resultB[7] >= resultC[5]) and (resultB[7] < resultC[9]))):
fileInB.write((resultC[1])+'\n')
fw.seek(0)
summe = sum
fileInA.close()
fileInB.close()
try:
pfad = "C:\RiemDaten\DatenRiem\Input"
filenames = os.listdir(pfad)
iter_list = []
for fname in filenames:
iter_list.append(iter(open(pfad+"\\"+fname, "r")))
for i in xrange(summe):
zeilex = []
for iter_f in iter_list:
zeilex.append(iter_f.next())
print zeilex
fileIn.write("".join(zeilex))
except StopIteration:
print "Ueberlauf"
fileIn.close()
Danke und Gruß
lumbes
Edit (Leonidas): Code in Python-Tags gesetzt.
Verfasst: Samstag 8. April 2006, 08:07
von gerold
Hi!
Bitte schließe deinen Code in Code-Tags ein. Dann fällt es uns leichter dir zu helfen.
Siehe
Codehighlighting.
mfg
Gerold

Verfasst: Samstag 8. April 2006, 10:10
von lumbes
Tut mir leid! Hatte zu schnell auf 'abschicken' gedrueckt.
Hier also noch einmal mein Problem:
Nachdem ich jetzt ne Weile in den Foren gesucht, mein Problem aber nicht gefunden habe, hier mein Problem:
Ich habe zwei gleich lange Listen, die ich zu einer neuen Liste verknüpfen moechte. Das funktioniert auch. Wenn ich diese neue Liste in eine Datei schreibe, erhalte ich jedoch folgendes Muster:
100:
200
134:
456
Ich brauche die Daten aber jeweils in einer Zeile, also so:
100: 200
134: 456
Mein Listenausdruck sieht folgendermaßen aus:
['100: \n', '200\n']
Hier der entsprechende code:
Code: Alles auswählen
global summe
fz=file("C:\RiemDaten\DatenRiem\zwischen.txt", "r")
fw=file("C:\RiemDaten\DatenRiem\wohnklein.txt", "r")
regexB=re.compile("(\d+)")
sum = 0
for b in fz.readlines():
sum += 1
resultB=regexB.split(b,7) #x1=resultB[1] y1=resultB[3] x2=resultB[5] y2=resultB[7]
for m in fw.readlines():
resultC=regexB.split(m,9) #strid=resultC[1] xmin=resultC[3] ymin=resultC[5] xmax=resultC[7] ymax=resultC[9]
if (((resultB[1] >= resultC[3]) and (resultB[1] < resultC[7])) and ((resultB[3] >= resultC[5]) and (resultB[3] < resultC[9]))):
fileInA.write((resultC[1])+': '+'\n')
if (((resultB[5] >= resultC[3]) and (resultB[5] < resultC[7])) and ((resultB[7] >= resultC[5]) and (resultB[7] < resultC[9]))):
fileInB.write((resultC[1])+'\n')
fw.seek(0)
summe = sum
fileInA.close()
fileInB.close()
try:
pfad = "C:\RiemDaten\DatenRiem\Input"
filenames = os.listdir(pfad)
iter_list = []
for fname in filenames:
iter_list.append(iter(open(pfad+"\\"+fname, "r")))
for i in xrange(summe):
zeilex = []
for iter_f in iter_list:
zeilex.append(iter_f.next())
print zeilex
fileIn.write("".join(zeilex))
except StopIteration:
print "Ueberlauf"
fileIn.close()
Ich habe auch schon versucht, in der Zeile:
'\n' wegzulassen, aber dann erhalte ich eine einzige große Liste und nicht eine, die mir die Werte zeilenweise einliest.
Freue mich ueber jeden Vorschlag! Danke
Lumbes
edit (jens): BBCode in diesem Beitrag aktiviert!
Verfasst: Samstag 8. April 2006, 10:47
von Python 47
Sieht so aus, als hättest du keine BBCodes in deinem Profil aktiviert!Aktiviere diese und setzt deinen Code dann nochmal in Python Tags!
Verfasst: Samstag 8. April 2006, 23:44
von BlackJack
lumbes hat geschrieben:Nachdem ich jetzt ne Weile in den Foren gesucht, mein Problem aber nicht gefunden habe, hier mein Problem:
Ich habe zwei gleich lange Listen, die ich zu einer neuen Liste verknüpfen moechte. Das funktioniert auch. Wenn ich diese neue Liste in eine Datei schreibe, erhalte ich jedoch folgendes Muster:
100:
200
134:
456
Ich brauche die Daten aber jeweils in einer Zeile, also so:
100: 200
134: 456
Mein Listenausdruck sieht folgendermaßen aus:
['100: \n', '200\n']
Hier der entsprechende code:
Code: Alles auswählen
global summe
fz=file("C:\RiemDaten\DatenRiem\zwischen.txt", "r")
fw=file("C:\RiemDaten\DatenRiem\wohnklein.txt", "r")
regexB=re.compile("(\d+)")
sum = 0
for b in fz.readlines():
sum += 1
resultB=regexB.split(b,7) #x1=resultB[1] y1=resultB[3] x2=resultB[5] y2=resultB[7]
for m in fw.readlines():
resultC=regexB.split(m,9) #strid=resultC[1] xmin=resultC[3] ymin=resultC[5] xmax=resultC[7] ymax=resultC[9]
if (((resultB[1] >= resultC[3]) and (resultB[1] < resultC[7])) and ((resultB[3] >= resultC[5]) and (resultB[3] < resultC[9]))):
fileInA.write((resultC[1])+': '+'\n')
if (((resultB[5] >= resultC[3]) and (resultB[5] < resultC[7])) and ((resultB[7] >= resultC[5]) and (resultB[7] < resultC[9]))):
fileInB.write((resultC[1])+'\n')
fw.seek(0)
summe = sum
fileInA.close()
fileInB.close()
Wo kommen denn `fileInA` und `fileInB` her? `summe` wird der Wert von `sum` zugewiesen, das ist also einfach nur ein umbenennen. Das mitzählen ist aber nicht wirklich notwendig.
Dann weiss ich nicht ob Deine Vergleiche so funktionieren wie Du das möchtest, Du vergleichst nämlich Zeichenketten auf kleiner/grösser und da ist zum Beispiel '10' kleiner als '9':
Code: Alles auswählen
In [26]:10 > 9
Out[26]:True
In [27]:'10' > '9'
Out[27]:False
Das `fw.seek(0)` ist zu weit eingerückt, das muss nicht bei jedem Durchlauf der inneren Schleife passieren.
Code: Alles auswählen
try:
pfad = "C:\RiemDaten\DatenRiem\Input"
filenames = os.listdir(pfad)
iter_list = []
for fname in filenames:
iter_list.append(iter(open(pfad+"\"+fname, "r")))
Das verbinden von Pfaden macht man besser mit `os.path.join()`, dann funktioniert das auch auf anderen Plattformen.
Code: Alles auswählen
for i in xrange(summe):
zeilex = []
for iter_f in iter_list:
zeilex.append(iter_f.next())
print zeilex
fileIn.write("".join(zeilex))
except StopIteration:
print "Ueberlauf"
fileIn.close()
Du musst die Zeilenenden nach dem einlesen entfernen. Zumindest von allen Zeilen ausser der aus der letzten Datei. Sonst hast Du beim Zusammenfügen diese Zeilenenden in der Zeile, und damit sind's dann mehrere. Die `rstrip()` auf Zeichenketten mit einem Zeilenende als Argument sollte das gewünschte tun.
Die ``for``-Schleife mit dem `i` sollte man weglassen können -- das Abfangen der `StopIteration` sollte ausreichend sein.
Verfasst: Montag 10. April 2006, 07:59
von lumbes
Hallo BlackJack,
Deine Fragen bzw. Anmerkungen haben mich auf neue Ideen gebracht. Ich bin die Sache, glaube ich, einfach zu kompliziert angegangen. Die beiden files 'fileInA' und 'fileInB' dienten mir zum Zwischenspeichern. Ich habe jetzt stattdessen Listen verwendet.
Die Variable 'sum' diente mir zum Schleifen zählen, damit ich in der try-except Anweisung keinen Ueberlauf erhalte.
Danke für den Hinweis mit dem 'fw.seek(0)', habe ich geaendert.
Vielen Dank fuer Deine Antwort, sie hat mir sehr geholfen!
Gruß
lumbes