Seite 1 von 1

verschachtelte for-Schleifen

Verfasst: Samstag 1. April 2006, 09:10
von lumbes
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

Verfasst: Samstag 1. April 2006, 10:00
von Python 47
Hallo,

setz deinen Code doch bittte mal richtig in PythonTags!

Danke!

Verfasst: Samstag 1. April 2006, 21:59
von 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.

Verfasst: Samstag 1. April 2006, 23:37
von Joghurt
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.

Verfasst: Montag 3. April 2006, 04:44
von lumbes
Hallo!

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

Gruß