我有一个文本文件,其中包含数百万个索引点,这些索引点都被解释为字符串,并且用制表符分隔.但是,某些索引点可能会丢失.这是我的文本文件的示例:
1 0 4 0d 07:00:37.0400009155273
2 0 4 0d 07:00:37.0400009155273
3 0 4 0d 07:00:37.0400009155273
5 0 4 0d 07:00:37.0400009155273
7 0 4 0d 07:00:37.0400009155273
9 0 4 0d 07:00:37.0400009155273
请注意,第4、6和8行丢失了.我的目标是创建一个可以解析文本文件,确定可能缺少的索引点并返回包含所有缺少的索引点(如果有)的列表或不返回任何内容的列表的函数.
我在Spyder IDE Windows10操作系统中使用Python 3.7.我对Python和*比较陌生.
这就是到目前为止.这适用于ID 1缺少索引,但是如果缺少几个索引点则失败.
错误从第一行else行开始.我不确定如何使用for循环的索引(0、1、2、3 …)跟踪文档(1、2、3、5 …)中观察到的索引,因为随着时间的推移缺少索引点.
请注意,文本文档的前4行包含标头信息,我在解析过程中忽略了标头信息,这就是为什么data = f.readlines()[4:]
def check_sorted_file(fileName):
missing_idx = []
count = 1
with open(fileName, 'r') as f:
data = f.readlines()[4:]
for x, line in enumerate(data):
idx = int(line.split()[0])
if idx == (count + x):
pass
else:
missing_idx.append(count + x)
count += 1
if missing_idx != []:
print('\nThe following idicie(s) are missing: ')
print(*missing_idx, sep=", ")
else:
print('\nAll indices are accounted for. ')
return missing_idx
…
感谢您提供的所有帮助!
解决方法:
另一个答案为您提供了更好的整体解决方案,但是我只想帮助您正确地指导给定的一个,以便您了解如何改变自己的工作方式:
def check_sorted_file(fileName):
missing_idx = []
last_index = 0
with open(fileName, 'r') as f:
data = f.readlines()[4:]
for line in data:
idx = int(line.split()[0])
if idx == last_index+1:
pass
else:
missing_idx.extend(list(range(last_index+1, idx)))
last_index = idx
if missing_idx:
print('\nThe following idicie(s) are missing: ')
print(*missing_idx, sep=", ")
else:
print('\nAll indices are accounted for. ')
return missing_idx
因此,无需使用枚举,我们将使用传入索引作为我们所在位置的指南.
为了解决多个缺失问题,我们使用range来获取最后一个索引和当前索引之间的所有数字,并使用新的数字集扩展列表.