[英]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.