После сопоставления строки, как мне прочитать еще несколько строк и записать значения, а затем начать все сначала?питон - PullRequest
0 голосов
/ 09 февраля 2012

Мне интересно, как найти в текстовом документе слово POLYLINE, а затем, как только я его найду, как продолжить поиск в текстовом документе дополнительных атрибутов для POLYLINE, таких как координаты x и y, и затем найти следующую POLYLINE и сделай это снова.

У меня есть текстовый файл, который выглядит так:

  1. POLYLINE
  2. ли
  3. X координат
  4. 1012 * пятьдесят *
  5. Y координата
  6. шестьдесят три
  7. ли
  8. ли
  9. X координат
  10. девяносто
  11. Y координат
  12. шесть
  13. POLYLINE
  14. И так далее ...

Пока все, что делает мой код, это найти слово POLYLINE, я застрял, пытаясь собрать атрибуты POLYLINE. Вот мой код:

import re

fileName = open("textdoc.txt, "r")



for line in fileName:
    if re.match("POLYLINE", line):
        print line



fileName.close()

Как я могу это исправить?

Ответы [ 2 ]

0 голосов
/ 09 февраля 2012

Предполагая, что структура является последовательной, вы можете собрать атрибуты, как показано ниже.

#store polylines in a list for future use
polylines=[]

dataFile = open('textdoc.txt')

#collect the attributes in dictionaries
attrs={}

#because it appears you need to look one line ahead to get the coordinates
# it would be easiest to read all lines into a list

datalines = dataFile.readlines()
for idx, line in enumerate(datalines):
    #handle polyline flags by storing the previous attributes
    if 'POLYLINE' in line:
        #attrs will evaluate to True if its not empty
        if attrs:
            #append the old polyline attributes and start a new one
            polylines.append(attrs)
            attrs = {}

        continue

    #collect the attributes from the line following the coord flag
    # of course this breaks real fast if the file structure changes
    if 'xcoord' in line:
        #grab the coordinate from the following line
        attrs['xcoord'] = datalines[idx + 1].strip()
        continue

    if 'ycoord' in line:
        attrs['ycoord'] = datalines[idx + 1].strip()
        continue
0 голосов
/ 09 февраля 2012
for line in fileName:
    if re.match("POLYLINE", line):
        for line in filename:
            if re.match(xcoord,line):
                dostuff()
            if re.match(ycoord,line):
                dostuff()

Что касается того, как вы на самом деле можете найти координаты, нам трудно что-либо сделать с тем, что вы предоставили.Если нет никакой схемы относительно того, в какой строке будут отображаться координаты, или если есть другие числа, которые не являются вашими координатами, и эти числа не имеют какой-либо идентификации как таковой, то вы мало что можете сделать.По сути, найдите то, что позволяет вам отличать координаты от всего остального, а затем просто найдите это.

...