簡體   English   中英

如何刪除文件中除第一個字符外的所有行?

[英]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遍歷for line in file的實際內容,而不是行號。 由於即使空字符串都大於0,所以您的第一個條件永遠不會為true,而第二個條件始終為true(當.startswith(..)也為true ...時)。

列表中的第一項的特殊處理有很多成語,這是一個非常簡單的方法,對代碼的調整很少:

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

您可以一個一個地追加文件。 學習Python Pandas庫

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM