如何删除包含特定字符的文件中除第一行以外的所有行?

How to remove all lines in a file containing a specific character except for the first?

我正在尝试制作一个脚本,将所有文件合并到一个目录中,然后删除输出文件中不需要的行。我要删除的行包含相同的字符串模式,我想删除除第一行以外的所有行(这也是文件中的第一行)。以下是我尝试这样做的方式:

import glob

# Merge all output files into one file
read_files = glob.glob('/home/user/Results/Script_tests/TestResults/*.output')

with open('MergedOutput.txt', 'r+b') as outfile:
    for file in read_files:
        with open(file, 'r+b') as infile:
            outfile.write(infile.read())

print 'Files merged.'          

# Remove header rows except from row 1

final_output = open('FinalMergedOutput.txt', 'r+b')
with open('MergedOutput.txt', 'r+b') as file:
    for line in file:
        if line == 0 and line.startswith('File'):
            final_output.write(line)
        elif line > 0 and not line.startswith('File'):
             final_output.write(line) 

print 'Headers removed except on line 1.' 

合并部分工作得很好,除了某些行似乎是在 FinalMergedOutput.txt 中复制的。然而,删除行会删除所有以 File 开头的行,并且不会保留第一个...

有没有人对此有一个优雅的解决方案?

for line in file 迭代文件的实际内容,而不是行号。由于即使是空字符串也大于 0,因此您的第一个条件永远不会为真,而第二个条件始终为真(当 .startswith(..) 也为真时...)。

有很多 to 的习语用于列表中第一项的特殊处理,这是一个非常简单的方法,对您的代码进行了最少的调整:

for line_num,line in enumerate(file):
    if line_num == 0 and line.startswith('File'):
        final_output.write(line)
    elif line_num > 0 and not line.startswith('File'):
         final_output.write(line) 

line == 0 将不起作用。 line 是包含该行文本的字符串,因此它永远不会为零。相反,请继续跟踪 行号 ,例如使用 enumerate:

for lineNumber, line in enumerate(file):
    if lineNumber == 0 and line.startswith('File'):
        final_output.write(line)
    elif lineNumber > 0 and not line.startswith('File'):
        final_output.write(line)

您还可以简化该检查:

for lineNumber, line in enumerate(file):
    if lineNumber == 0 or not line.startswith('File'):
        final_output.write(line)

首先,打开文件:

f = open("yourfile.txt","r")

接下来,从文件中获取所有行:

lines = f.readlines()

现在您可以关闭文件了:

f.close()

并以写入模式重新打开它:

f = open("yourfile.txt","w")

然后,把你的台词写回去,除了你想删除的台词。您可能希望将“\n”更改为文件结尾使用的任何行。

for line in lines:
  if line!="file_line_to_delete"+"\n":
    f.write(line)

最后,再次关闭文件。

f.close()

您可以一个接一个地追加文件。学习PythonPandas图书馆.