我需要使用 Python 读取一组坐标文件。第一行将有一个数字n,它是需要读取的坐标集的数量。第一行之后将是n行,其中每行包含一个坐标对。
示例(在这种情况下,n = 4):
n
(x,y)
(x,y)
(x,y)
(x,y)
问题是文件中会有多个部分。所以第一个 n 可能是 10,有 10 组坐标,下一个 n 可能是 20,后面有 20 组坐标。
截至目前,我只是单独读取坐标部分,但如果我可以在我正在读取的文件中包含任意数量的坐标部分,我希望它。
您可以使用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
研究使用生成器。您可以通过生成器读取第一行,然后它将告诉产生多少行,直到下一次读取:
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)
如果我理解正确,您当前正在读取不同的文件,其中前导 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