我如何阅读n行,其中n是使用Python的文件中的第一行?

时间:2012-11-08 23:05:28

标签: python io

我需要使用Python读取一组坐标文件。第一行将有一个数字 n ,这是需要读取的坐标集的数量。在第一行之后将是 n 行,其中每行包含单个坐标对。

示例(在这种情况下,n = 4):

n
(x,y)
(x,y)
(x,y)
(x,y)

问题是文件中会有多个部分。所以第一个n可能是10,有10组坐标,下一个n可能是20,有20组坐标跟随它。

到目前为止,我只是单独阅读坐标的各个部分,但如果我能在我正在阅读的文件中有任意数量的坐标部分,我希望如此。

2 个答案:

答案 0 :(得分:1)

研究使用发电机。您可以通过生成器读取第一行,然后它将告知要产生多少行,直到下一次读取:

def gen_coord(a_file):
    num = 0
    for line in a_file:
        if num == 0:
            num = int(line)
        else:
            num -= 1
            yield line

source = open("somefile")
coords = gen_coord(source)
for coord in coords:
    print (coord)

答案 1 :(得分:1)

如果我理解正确,您当前正在读取不同的文件,其中前导n值后跟n个坐标。但是,您希望使用单个文件执行此操作。

你可以做的是创建一个嵌套列表,并根据你的格式将一个coords列表附加到一个主列表。

coord_list = []
myfile = open('coords.txt','r')
while 1:
    coord_count = myfile.readline().replace('\n','')
    if not coord_count:
        break
    coord_list.append([myfile.readline().replace('\n','') for i in range(int(coord_count))])

print coord_list
  • 注意:您可能仍需要转换这些'(x,y)'s