如果您的文件包含三个值的组(在第一P3
项之后)并且您不能依靠换行符将它们正确分组,我建议将文件作为单个字符串读取并自己进行拆分和分组。这是一个直截了当的方法:
with open(filename) as f:
text = f.read() # get the file contents as a single string
tokens = text.split() # splits the big string on any whitespace, returning a list
it = iter(tokens) # start an iterator over the list
prefix = next(it) # grab the "P3" token off the front
triples = list(zip(it, it it)) # make a list of 3-tuples from the rest of the tokens
zip
对同一个迭代器的多个引用使用是这里的关键技巧。如果您需要使用相同的代码处理其他组大小,您可以使用zip(*[it]*grouplen)
.
请注意,如果它们不构成三个一组,这将丢弃文件末尾的任何剩余值。如果您需要以不同的方式处理这种情况,我建议zip_longest
从itertools
模块中使用,而不是常规zip
函数。(请参阅文档grouper
中的配方。)itertools