verschachtelte for-Schleifen

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
lumbes
User
Beiträge: 5
Registriert: Samstag 1. April 2006, 08:41

Hallo

ich bin mit Python noch nicht so vertraut, daher ist mein Problem vielleicht (und hoffentlich) einfach zu lösen:
Ich habe zwei .txt files, die ich so miteinander verknüpfen möchte, dass jede Zeile der einen Tabelle (texta.txt) an der Stelle der anderen (textb.txt) unter der if-Bedingungen angefügt wird.
Mein Code sieht so aus:

Code: Alles auswählen

import re,sys

fz=file('C:\RiemDaten\DatenRiem\zwischen.txt', 'r')
fw=file('C:\RiemDaten\DatenRiem\wohnklein.txt', 'r')
regexB=re.compile('(\d+)', re.M)
for b in fz.readlines():
    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,5)
        xmin=resultC[3]
        ymin=resultC[5]
        xmax=resultC[7]
        ymax=resultC[9]
        strid=resultC[1]
        if ((x1 > xmin) and (x1 < xmax)) and ((y1 > ymin) and (y1 < ymax)):
        print xmin, xmax, ymin, ymax, strid, x1, y1
    print


Mein Problem: Ich erhalte mit diesem Code nur die letzte Zeile von texta.txt korrekt zugeordnet. Ich denke aber, dass für jeden äußeren for-Schleifenlauf alle inneren Schleifen durchlaufen werden, so dass im Endeffekt jede Zeile von texta.txt alle Zeilen von textb.txt durchlaufen müssten.

Über einen Tipp wäre ich sehr dankbar
Gruß lumbes

moderiert von blackbird: code tags gesetzt
Python 47
User
Beiträge: 574
Registriert: Samstag 17. September 2005, 21:04

Hallo,

setz deinen Code doch bittte mal richtig in PythonTags!

Danke!
mfg

Thomas :-)
BlackJack

Im Prinzip hast Du recht: Die innere Schleife wird für jeden Durchlauf der äusseren Schleife ausgeführt. Allerdings liest `fw.readlines()` beim ersten Mal die gesamte Datei und in allen folgenden aufrufen gibt das `readlines()` eine leere Liste zurück:

Code: Alles auswählen

In [6]:f = open('test.py', 'r')

In [7]:f.readlines()
Out[7]:
['#!/usr/bin/env python\n',
 '# -*- coding: utf-8 -*-\n',
 'from __future__ import division\n',
 '\n',
 '\n',
 'def main():\n',
 '    pass\n',
 '\n',
 '\n',
 "if __name__ == '__main__':\n",
 '    main()\n']

In [8]:f.readlines()
Out[8]:[]

In [9]:f.readlines()
Out[9]:[]
Du müsstest also entweder die Daten der zweiten Datei vor der äusseren Schleife einlesen und dann in der inneren Schleife über die Liste iterieren, oder in der inneren Schleife die Datei immer wieder neu öffnen, einlesen und schliessen.
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

BlackJack hat geschrieben:Du müsstest also entweder die Daten der zweiten Datei vor der äusseren Schleife einlesen und dann in der inneren Schleife über die Liste iterieren, oder in der inneren Schleife die Datei immer wieder neu öffnen, einlesen und schliessen.
Ein einfaches

Code: Alles auswählen

fw.seek(0)
am Ende der zweiten Schleife reicht auch.

BTW: Statt

Code: Alles auswählen

for line in datei.readlines():
kann man neuerdings auch

Code: Alles auswählen

for line in datei:
schreiben.
lumbes
User
Beiträge: 5
Registriert: Samstag 1. April 2006, 08:41

Hallo!

Vielen Dank für die Tipps: Ich habe mal alle Vorschläge durchgearbeitet, jetzt läuft es prima!

Gruß
Antworten