python-如何识别缺少的索引

我有一个文本文件,其中包含数百万个索引点,这些索引点都被解释为字符串,并且用制表符分隔.但是,某些索引点可能会丢失.这是我的文本文件的示例:

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来获取最后一个索引和当前索引之间的所有数字,并使用新的数字集扩展列表.

上一篇:python-使用numpy过滤元组列表中的行


下一篇:python-使用Pandas中的方法链接分配给列的子集