在python中查找某些单词并将其写入文件中

在python中查找某些单词并将其写入文件中,python,regex,file,text,nltk,Python,Regex,File,Text,Nltk,我有一个西里尔文的.txt文件。它的结构是这样的,但在西里尔语中: city text text text.#1#N river, text text.#3#Name (Name1, Name2, Name3) lake text text text.#5#N (Name1) mountain text text.#23#Na 我需要什么: 1) 看一行中的第一个单词 2) 如果是“river”,则在“#3#”之后写下所有单词,即文件“river”中的名称(Name1、N

我有一个西里尔文的.txt文件。它的结构是这样的,但在西里尔语中:

city text text text.#1#N
river, text text.#3#Name (Name1, Name2, Name3)   
lake text text text.#5#N (Name1)        
mountain text text.#23#Na
我需要什么:
1) 看一行中的第一个单词
2) 如果是“river”,则在“#3#”之后写下所有单词,即文件“river”中的名称(Name1、Name2、Name3)

我还必须用另外一个词来表达,我。e城市、湖泊、山脉
我所做的只会在第一个单词是“city”时找到,并将整行保存到一个文件中:

lines = f.readlines()
for line in lines:
    if line.startswith('city'):
        f2.write(line)
f.close()
f2.close()
我知道我可以使用正则表达式查找名称:#[0-9]+#(\W+)但我不知道如何将其实现为代码。

我真的需要你的帮助!我很高兴能得到任何帮助。

如果你所有的河流都在它们后面,就像你上面发布的代码一样,我会这样做:

for line in f.readlines():
     items = line.split("**,")
     if items[0] == "**river":
          names = line.split("#")[1].strip().split("(")[1].split(")")[0].split(",")
          names = [Name1, Name2, Name3]
          #.. now write each one

这里要做的是避免硬编码所需文件的名称。而是从输入文件中收集。为需要写入的文件创建一个字典,根据需要打开每个文件。类似这样的情况(未经测试,可能需要一些调整):


我会稍微适应使用:
outfiles.setdefault(tag,open('tag'+'.txt','w')).write(content+'\n')
而不是每次点击
setdefault()
都会再次打开文件,因为
open()
在传入之前会进行计算。不过,您可以将
dict
子类化并覆盖
\uuuuuuuuuuuuuuuuuu
!说得好。我不太清楚这是一个糟糕的建议,为什么看起来这么好:)。。。哦,好吧,我们有权不时地打个嗝!真遗憾,它似乎奏效了……我已经编辑了我的帖子,让它更清晰了!你可以在debuggex.com上试用你的正则表达式!他们有一个python设置nx来回答问题。我已经编辑了我的帖子,所以没有河流**s,名字是可以更改的。我能用这个做什么?提前通知我。
 outfiles = {}
 try:
     with open("infile.txt") as infile:
         for line in infile:
             tag = line.split(" ", 1)[0].strip("*, ")     # e.g. "river"
             if tag not in outfiles:   # if it's the first time we've seen a tag
                 outfiles[tag] = open(tag = ".txt", "w")  # open tag.txt to write
             content = line.rsplit("#", 1)[-1].strip("* ")
             outfiles[tag].write(content + "\n")
 finally:
     for outfile in outfiles.itervalues():
         outfile.close()