在文本文件的某些特殊行前添加标记

时间:2015-12-24 17:48:03

标签: python

我有2个文件。第一行包含2000000行,每行包含一个单词及其前面的词性标记。第二行包含一些单词,每行包含一行。我必须检查第一个文件中是否存在第二个文件的单词。如果它存在,我必须在该单词前面添加一个“WSD”标记,否则,只需写入该行而不做任何更改。我编写的代码有效,但它打印每行超过50次。如何更改它以便它只写一行?

with open ("c:/python34/h.txt", encoding="utf-8") as f1:
    f1=f1.readlines()
with open ("c:/python34/WSD.txt", encoding="utf-8") as f2:
    f2=f2.read().split()
with open ("result.txt", "w", encoding="utf-8") as f3:
     for line in f1:
         for i in f2:
             if i in line:
                 line = line + "\t\t\t\t" + "WSD"
             else:
                 line = line
                 f3.write(line + "\n")
                 f3.write(" ") 

语言是波斯语。 第一个文件的片段:

ستارهشناسانN_PL ميگويندV_PRS كهCON بادNOUN ممكنADJ_SIM استV_PRE اولينADJ_SUP

1 个答案:

答案 0 :(得分:1)

一些事情。

  1. 您对该文件的写入不应该在else循环中。写入应该是外部for循环的一部分。
  2. 您的第二个file.write()调用会在每行之前添加一个不必要的空格。
  3. 我为你重新编写并简化了它。

    with open ("c:/python34/h.txt", encoding="utf-8") as f1:
        f1=f1.readlines()
    with open ("c:/python34/WSD.txt", encoding="utf-8") as f2:
        f2=f2.read().split()
    with open ("result.txt", "w", encoding="utf-8") as f3:
         for line in f1:
             for i in f2:
                 if i in line:
                     line = line + "\t\t\t\t" + "WSD"
             f3.write(line + "\n")
    

    还有一件事。你有这个代码的方式,WSD被添加到行的末尾,而不是像你说的那样在单词的前面。

    当在一行中找到多个单词时,您还应该考虑程序的行为。正如当前编写的那样,当发生这种情况时,WSD将被多次添加。