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

时间:2015-09-30 06:27:11

标签: python line

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

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开头的所有行,并且不会删除第一行...

有没有人有这个优雅的解决方案?

3 个答案:

答案 0 :(得分:0)

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

对于列表中第一项的特殊处理,有很多习惯用法,这是一个非常直接的习惯,只需对代码进行最少的调整:

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) 

答案 1 :(得分:0)

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)

答案 2 :(得分:0)

首先,打开文件:

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()

您可以逐个追加文件。学习 Python Pandas库

相关问题