2015-10-07 126 views
0

我有一個文件中的文檔列表。基本上由普通話和英文文件組成的TDT2語料庫。我只想保留英文文件並刪除普通話文件。手動這樣做會很長,因爲文件很大。在Python中刪除文件中的特定行

結構看起來是這樣的:

<ONTOPIC topicid=20001 level=YES docno=VOA19980630.1800.3165 fileid=19980630_1800_1900_VOA_ENG comments="NO"> 
<ONTOPIC topicid=20001 level=BRIEF docno=VOM19980220.0700.0559 fileid=19980220_0700_0800_VOA_MAN comments="NO"> 
<ONTOPIC topicid=20001 level=YES docno=VOM19980220.0700.1159 fileid=19980220_0700_0800_VOA_MAN comments="NO"> 

所以我想刪除它在他們的fileid一個「人」的文件。 如何在Python中執行此特定任務?

+0

因此這些線是一個文件的內容,你想輸出中具有「ENG」行?如果我發佈了答案。 – garg10may

回答

0

如果行不是用\n寫的,只是將它從endswith子句中移除。 這將忽略任何以MAN comments="NO">結尾並輸出其他文件的文件。

out = open('file2.txt','wb')  
for i in open('file.txt'): 
    if i.endswith('MAN comments="NO">\n'): 
     pass 
    else: 
     out.write(i) 

out.close() 

如果您確定'MAN'只會是mandarian的一部分。看起來有點乾淨。

out = open('file2.txt','wb')  
for i in open('file.txt'): 
    if 'MAN' not in i: 
     out.write(i) 

out.close() 
+0

謝謝。但是,我剛剛意識到這些文件中有一部分是英文的,但它們沒有ENG擴展名。如果我使用這個,那麼即使這些文件也會被刪除。有些是這樣的:所以這仍然是一個英文文件,但它不包含NG符號。在這種情況下,有可能做一些事情,如果我在(** VOA *,** ABC *)?這裏的星星是指通配符和VOA,ABC是我知道的英文文件的開始關鍵字。 – minks

+0

哦,好的,現在就試試修改 – garg10may

+0

。它只會忽略MAN文件。 – garg10may

0

你可以試試這個:

def start(): 
    sFile = "source.txt" 
    dFile = "results.txt" 
    with open(dFile, 'w') as dHandle: 
     with open (sFile, "r") as fhandle: 
      for fline in fhandle.readlines(): 
       if "MAN" not in fline: 
        dHandle.write(fline) 

start() 
+0

這是非常普遍的,「MAN」可以很容易地成爲ENG文件描述的一部分等等。它具有docno,fileid,anycan可以包含' MAN' – garg10may

+0

另外'in'的效率不如'endswith' – garg10may

+0

他的問題僅限於刪除其fileid中包含「MAN」的文件,因此,包含「MAN」的所有fileid都將在結果中被丟棄 – vahnevileyes