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

2024-06-25 22:40:25 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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开头的所有行,并且不保留第一行。。。在

有没有人有一个优雅的解决办法?在


Tags: 文件txtreadoutputaswithlinefiles
3条回答

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)

您还可以简化检查:

^{pr2}$

首先,打开文件:

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

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

^{pr2}$

现在可以关闭文件:

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库。在

for line in file迭代文件的实际内容,而不是行号。{e>当第一个条件为偶数时,{e>永远不会大于第二个条件。在

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

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) 

相关问题 更多 >