我正在使用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循环迭代中一样。
答案 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