2015-10-07 58 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