Получение информации из следующей строки для цикла - PullRequest
0 голосов
/ 08 ноября 2018

Я использую цикл for для чтения файла координат построчно. В некоторых случаях мне нужна информация из следующей строки, чтобы выполнить математику в текущей строке, например формула расстояния.

Содержимое файла выглядит так:

X66.745 Y108.729 
X67.255 Y108.584 
X139.519 Y90.769
X142.494 Y90.161
X143.062 Y90.068

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

Мой текущий код:

def get_xy_coord(line):
    x_coord = []
    y_coord = []
    line_list = line.split()
    x_ = line_list[1].split('X')
    x_ = x_[1]
    x_coord.append(x_)
    y_ = line_list[2].split('Y')
    y_ = y_[1]
    y_coord.append(y_)
    return x_coord[-1:], y_coord[-1:]




### Load File

file_name = 'path'  # put your filename here

with open(file_name, 'r+') as f:
    contents = f.readlines()

    for line in contents:
        if 'X' in line:
            x1, y1 get_xy_coord(line)
            #get x2 , y2 to do distance formula

Я прочитал другой пост о получении следующей строки, но ни один из них не работал для моего приложения, например, опция next (), которая, я думаю, связана с тем, что я работаю с файлом, а не со списком значений. После использования содержимого строки и строки после нее, я все еще хотел бы просто продвинуться на 1 строку, как если бы она была обычной для итерации цикла.

1 Ответ

0 голосов
/ 08 ноября 2018

Вы можете использовать функцию генератора, которая всегда возвращает вам 2 строки из файла:

def line2Points(l):
    return {p[0].lower(): float(p[1:]) for p in l.strip().split(' ')}

def pairs(f):
    # Generator function to read 2 lines
    i = iter(f)
    prev = i.next()
    for item in i:
        yield prev, item
        prev = item

with open(file_name, 'r+') as f:
    coords = pairs(f)
    for currentLine, nextLine in coords:
        currentPoint = line2Points(currentLine)
        nextPoint = line2Points(nextLine)
        print currentPoint, '>>>', nextPoint 

Это напечатает текущую и следующую координату вместе:

{'y': 108.729, 'x': 66.745} >>> {'y': 108.584, 'x': 67.255}
{'y': 108.584, 'x': 67.255} >>> {'y': 90.769, 'x': 139.519}
{'y': 90.769, 'x': 139.519} >>> {'y': 90.161, 'x': 142.494}
{'y': 90.161, 'x': 142.494} >>> {'y': 90.068, 'x': 143.062}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...