删除python中文本文件的某些部分
我有一个很大的文本文件,我想过滤掉一些行。第一行是标识符,后面跟着许多行(不同行中的数字),如本例所示: 例如:删除python中文本文件的某些部分,python,Python,我有一个很大的文本文件,我想过滤掉一些行。第一行是标识符,后面跟着许多行(不同行中的数字),如本例所示: 例如: fixedStep ch=GL000219.1 start=52818 step=1 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 fixedStep ch=GL000320.1 start=52959 step=1 1.000000 1.000000 1.000000 fixedStep ch=M st
fixedStep ch=GL000219.1 start=52818 step=1
1.000000
1.000000
1.000000
1.000000
1.000000
1.000000
1.000000
fixedStep ch=GL000320.1 start=52959 step=1
1.000000
1.000000
1.000000
fixedStep ch=M start=52959 step=1
1.000000
1.000000
此行是标识符:fixedStep ch=GL000219.1 start=52818 step=1
我想过滤掉所有包含ch=GL000219.1
和ch=GL000320.1
的标识符行和以下行(数字),并将其他标识符和相应的行(数字)保留在它们下面。每个标识符重复多次。
像这样的输出:
fixedStep ch=M start=52959 step=1
1.000000
1.000000
我尝试过以下代码:
l = ["ch=GL000219.1", "ch=GL000320.1"] # since I have more identifiers that should be removed
with open('file.txt', 'r') as f:
with open('outfile.txt', 'w') as outfile:
good_data = True
for line in f:
if line.startswith('fixedStep'):
for i in l:
good_data = i not in line
if good_data:
outfile.write(line)
我的代码没有返回我想要的。您知道如何修改代码吗?从文本文件中读取字符串(文本文件的内容)后,需要将其拆分为行。使用
印刷品(f)
读入f后,您会发现这是一个字符串,而不是行
如果是unix结尾文本文件,请使用
f=f.split(“\n”)
若要将字符串转换为列表,则可以逐行循环。您将此行放置在错误的位置:
good_data = True
一旦设置为false,它就不再是true
你可以这样写:
l = ["ch=GL000219.1", "ch=GL000320.1"]
flag = False
with open('file.txt', 'r') as f, open('outfile.txt', 'w') as outfile:
for line in f:
if line.strip().startswith("fixedStep"):
flag = all(i not in line for i in l)
if flag:
outfile.write(line)
在
good_data=i not in line
下添加一个break
,如果它变为False
<代码>好的\u数据可以为一行获取多个值,因为它正在覆盖自身,因此对于i
的最后一个值,好的\u数据
需要为每一行重置,没有?我试过了,但没什么区别。如果我正确理解你的问题,你需要做一些修改。你尝试了什么?如果我不调用列表并逐个尝试标识符,那么每次对其中一个标识符都非常有效,但我花了很多时间尝试所有标识符。我希望一次对所有标识符执行此操作。它会删除标识符下面的每一行,即使是我感兴趣的行in@john你说的“删除每一行”是什么意思,我不明白!每个标识符下面都有一些行(如示例所示)。我想删除一些我不感兴趣的标识符和下面几行。实际上,还有一些我感兴趣的标识符,我想要它们和它们下面的对应行。喜欢example@john我理解。我更新了密码,这是你想要的吗?