1

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

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

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

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

截至目前,我只是单独读取坐标部分,但如果我可以在我正在读取的文件中包含任意数量的坐标部分,我希望它。

4

3 回答 3

4

您可以使用open()打开文件进行读取,readline()逐行读取文件内容,以及int()将字符串转换为整数。

这是使用这些部分的示例实现:

def read_coords(file_handle):
    try:
        nrecords = int(file_handle.readline())
    except ValueError:
        return False
    return [file_handle.readline() for i in range(nrecords)]

coord_sets = []
with open("some.txt") as f:
   coords = read_coords(f)
   while coords != False:
       coord_sets.append(coords)
       coords = read_coords(f)

print "coord_sets =",coord_sets
于 2012-11-08T23:11:54.017 回答
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)
于 2012-11-08T23:31:59.867 回答
1

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

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

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
于 2012-11-08T23:32:56.517 回答