在这种格式的字典中跟踪数据:
data = {
ID: [value, 'string'],
}
当您从文件中读取每一行时,请查看该 ID 是否已在字典中。如果没有,添加它;如果是,并且当前ID更大,则在dict中替换它。
最后,你的 dict 应该有每个最大的 ID。
# init to empty dict
data = {}
# open the input file
with open('file.txt', 'r') as fp:
# read each line
for line in fp:
# grab ID, value, string
item_id, item_value, item_string = line.split()
# convert ID and value to integers
item_id = int(item_id)
item_value = int(item_value)
# if ID is not in the dict at all, or if the value we just read
# is bigger, use the current values
if item_id not in data or item_value > data[item_id][0]:
data[item_id] = [item_value, item_string]
for item_id in data:
print item_id, data[item_id][0], data[item_id][1]
字典不强制对其内容进行任何特定排序,因此在程序结束时,当您从字典中取回数据时,它可能与原始文件的顺序不同(即您可能会看到首先是 ID 2,然后是 ID 1)。
如果这对您很重要,您可以使用OrderedDict,它会保留元素的原始插入顺序。
(当您说“按块读取”时,您是否有特定的想法?如果您的意思是特定数量的字节,那么如果块边界碰巧落入,您可能会遇到问题一个单词的中间......)