python - 如何根据列表中的索引删除文件中的行
问题描述
我有一个 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)
`
解决方案
创建一个包含您需要删除的数字的集合,并在阅读新行时不断更新它。如果新行从集合中的一个元素开始,则跳过它并且不将其写入输出文件。
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))
推荐阅读
- c# - 如何为文件中的每一行设置唯一编号(仅限 7 位)
- javascript - 滚动时在移动设备上自动显示图像悬停效果
- unit-testing - 如何在clojure中测试用实习生创建的函数?
- excel-formula - s;umproduct 具有多个标准
- nginx - 如何在 nginx 中为多个网站创建反向代理
- python - string.split() 在 pandas 数据框中给出内存错误
- java - 使用新的 com.mirth.connect.client.core.Client(url) 出现异常“包装的 java.lang.IllegalStateException:zip 文件已关闭”;
- scala - spark数据框中的动态列数
- xml - 如何修复我的按钮面板在古巴平台中的位置?
- python - 动画文本颜色并让其他小部件等待