从for循环的下一行获取信息

时间:2018-11-08 00:49:29

标签: python-2.7 for-loop if-statement coordinates

我正在使用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行,就好像它在正常的for循环迭代中一样。

1 个答案:

答案 0 :(得分:1)

您可以使用一个生成器函数,该函数始终从文件返回2行:

**Outcome**
        product_no   dist   code  p_no   vendor    code   product
        040          wmn    aj    040    wmn       *j     y
        040          wmn    lm    040    wmn       **     y
        040          wmn    mn    040    wmn       mn     n

这将一起打印当前和下一个坐标:

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