Python-按第一个字符删除行

Python-按第一个字符删除行,python,file,file-handling,Python,File,File Handling,我有一个“test.txt”文件,其中包含: (5 rows) a (7 rows) b 我想删除以“(”字符开头的行。 我的代码在这里: with open("test.txt", "r") as fin: with open("result.txt", "w") as fout: for line in fin: if line.startswith('('): fout.write(line.replace(

我有一个“test.txt”文件,其中包含:

(5 rows)
a
(7 rows)
b
我想删除以“(”字符开头的行。 我的代码在这里:

with open("test.txt", "r") as fin:
    with open("result.txt", "w") as fout:
        for line in fin:
            if line.startswith('('):
                fout.write(line.replace('(',''))
            else:
                fout.write(line)
但返回:

5 rows)
a
7 rows)
b
我想得到结果:

a

b
可以用“开始,开始”吗


谢谢

您替换了一个字符,还写了一行

而不是使用
fout.write('\n')
编写换行符

with open("test.txt", "r") as fin:
    with open("result.txt", "w") as fout:
        for line in fin:
            if line.startswith('('):
                fout.write('\n')
            else:
                fout.write(line)

您可以替换一个字符并写入行

而不是使用
fout.write('\n')
编写换行符

with open("test.txt", "r") as fin:
    with open("result.txt", "w") as fout:
        for line in fin:
            if line.startswith('('):
                fout.write('\n')
            else:
                fout.write(line)

如果行以
)开头,您只需更改所做的操作。我们只需
编写一行新行(
\n
)。我们不想
替换任何内容,因为我们想完全删除行

下面是完整的代码的样子:

with open("test.txt", "r") as fin:
    with open("result.txt", "w") as fout:
        for line in fin:
            if line.startswith('('):
                fout.write("\n")
            else:
                fout.write(line)
它将
result.txt
创建为:

[empty line]
a
[empty line]
b

其中,
[空行]
只代表一个空行,但在这个答案中,它更为明显

如果该行确实以
开头(
),您只需更改所做的操作。我们只需
编写一个新行(
\n
).我们不想更换任何东西,因为我们想完全摆脱这条线路

下面是完整的代码的样子:

with open("test.txt", "r") as fin:
    with open("result.txt", "w") as fout:
        for line in fin:
            if line.startswith('('):
                fout.write("\n")
            else:
                fout.write(line)
它将
result.txt
创建为:

[empty line]
a
[empty line]
b
其中,
[空行]
仅表示一个空行,但在回答中使用“not”使其更为明显:

使用“非”的备选方案:


是的,可以使用
.startswith()
方法执行您想要执行的操作。您的检查没有问题。当您找到匹配项时,您所执行的操作会给您带来麻烦

with open("test.txt", "r") as fin:
    with open("result.txt", "w") as fout:
        for line in fin:
            if line.startswith('('):
                fout.write('\n') # fout.write(line.replace('(',''))
            else:
                fout.write(line)
如果要删除以“(”开头的行,请不要将它们写入新文件…而是写出一个空行(仅为新行字符)。根据上面的描述,将以“(”开头的行替换为空行似乎是您想要的

如果不想将“(”行替换为空行,那么代码可以简单一点:

            if line.startswith('('):
                fout.write('\n') # fout.write(line.replace('(',''))
            else:
                fout.write(line)
可能只是

            if not line.startswith('('):
                fout.write(line)

是的,可以使用
.startswith()
方法执行您想要执行的操作。您的检查没有问题。当您找到匹配项时,您所执行的操作会给您带来麻烦

with open("test.txt", "r") as fin:
    with open("result.txt", "w") as fout:
        for line in fin:
            if line.startswith('('):
                fout.write('\n') # fout.write(line.replace('(',''))
            else:
                fout.write(line)
如果要删除以“(”开头的行,请不要将它们写入新文件…而是写出一个空行(仅为新行字符)。根据上面的描述,将以“(”开头的行替换为空行似乎是您想要的

如果不想将“(”行替换为空行,那么代码可以简单一点:

            if line.startswith('('):
                fout.write('\n') # fout.write(line.replace('(',''))
            else:
                fout.write(line)
可能只是

            if not line.startswith('('):
                fout.write(line)

您可以使用以下步骤实现所需的输出

  • read
    模式下打开所需文件
  • 读所有的行
  • 关闭文件
  • write
    模式下再次打开文件
  • 写入所需行,将不需要的行替换为
    \n
  • 关闭文件

    f = open("test.txt","r")
    lines = f.readlines()
    f.close()
    
    f = open("test.txt","w")
    
    for line in lines:
       if not line.startswith('('):
          f.write(line)
       else:
           f.write('\n')
    
    f.close()
    

您可以通过以下步骤实现所需的输出

  • read
    模式下打开所需文件
  • 读所有的行
  • 关闭文件
  • write
    模式下再次打开文件
  • 写入所需行,将不需要的行替换为
    \n
  • 关闭文件

    f = open("test.txt","r")
    lines = f.readlines()
    f.close()
    
    f = open("test.txt","w")
    
    for line in lines:
       if not line.startswith('('):
          f.write(line)
       else:
           f.write('\n')
    
    f.close()
    

而不是
fout.write(line.replace('(',''))
只需使用:

fout.write('\n')
将用新行字符替换该行,因此您的代码将是:

with open("test.txt", "r") as fin:
    with open("result.txt", "w") as fout:
        for line in fin:
            if line.startswith('('):
                fout.write('\n')
            else:
                fout.write(line)

不要使用
fout.write(line.replace('(',''))
只需使用:

fout.write('\n')
将用新行字符替换该行,因此您的代码将是:

with open("test.txt", "r") as fin:
    with open("result.txt", "w") as fout:
        for line in fin:
            if line.startswith('('):
                fout.write('\n')
            else:
                fout.write(line)

还可以使用系统命令处理文件。例如,在Linux中:

import os
os.system("cat test.txt | sed 's/^(.*$//' > results.txt")

cat
读取填充文件,
|
是通过管道将输出传输到
sed
,它将以
开头的行替换为空(
为空,最后
将输出重定向到输出文件。

还可以使用系统命令处理文件。例如,在Linux中:

import os
os.system("cat test.txt | sed 's/^(.*$//' > results.txt")

cat
读取内嵌,
|
是将输出通过管道传输到
sed
,sed将替换以
开头的行(
为空,最后
将输出重定向到outfile)。

如果源行以
或根本没有行?只需写一行新行,而不是替换找到的
,即
fout.write(“\n”)
)是的,Matthias…如果行以
开头(
,为什么要写出来?只需写一行新行(
\n
)在
if
块中,您应该很好。如果您不想写任何东西,只需说“if not line.startswith('('):”,并且不要包含else子句。如果源行以
开头,或者根本没有行,您希望结果是空行吗?只需写一行新行,而不是替换找到的
,即
fout.write(“\n”)
)是的,Matthias…如果这行以
)开头,你为什么要写出来?只要在
If
块中写一个换行(
\n
),你应该写得很好。如果你什么都不想写,只需说“If not line.startswith”(“(”):”就行了,不要包含else子句。