首页 > 解决方案 > 如何根据列表中的索引删除文件中的行

问题描述

我有一个 txt 文件,格式如下:

1  2  [2, 3, 5]

2  5  [3, 4]

5  6  [4, 5]

4  9  [1, 6]

我需要编写一个脚本来删除第一列等于每行列表中的索引的行。但是,如果已经处理了一条线,那么它是安全的。

例如,当它转到第一行时,它首先读取列表,里面的索引是 2、3 和 5。所以它会删除第一列 2、3 和 5 的行。所以第二行和第三行被删除。到第四行时,它有索引 1 和 6。但是,这一次,第 1 行已被处理,因此它不会删除第一行,而是该行以 6 开头。

`

for x, line in enumerate(f):
     a = line.split('\t')
     a[2] = ast.literal_eval(a[2])
     index = [a[2]]
     for element in index:
         data = pd.read_csv(path[x:-1, :], sep='\t', header=None, engine='python', index_col=0)
         data.drop(element, inplace=True)

`

标签: pythonpython-3.x

解决方案


创建一个包含您需要删除的数字的集合,并在阅读新行时不断更新它。如果新行从集合中的一个元素开始,则跳过它并且不将其写入输出文件。

to_delete = set()

with open('input_file', 'r') as input_file, open('output_file', 'w') as output_file:
    for line in input_file:
        first, _, raw_list, *_ = line.split('\t')
        if int(first) in to_delete:
            continue
        output_file.write(line)
        to_delete.update(ast.literal_eval(raw_list))

推荐阅读