【问题标题】:Find and write certain words in lines to a file in python在python中查找并将某些单词成行写入文件
【发布时间】:2013-11-04 22:13:42
【问题描述】:

我有一个西里尔文的 .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. 城市、湖泊、山脉
我所做的仅查找第一个单词是否为“城市”并将整行保存到文件中:

lines = f.readlines()
for line in lines:
    if line.startswith('city'):
        f2.write(line)
f.close()
f2.close()

我知道我可以使用正则表达式来查找名称:#[0-9]+#(\W+),但我不知道如何将它实现到代码中。
我真的需要你的帮助!我很高兴能得到任何帮助。

【问题讨论】:

  • 我已经编辑了我的帖子以使其更清晰ю
  • 嗨!您可以使用 debuggex.com 尝试您的正则表达式!他们有一个 python 设置

标签: python regex file text nltk


【解决方案1】:

如果你所有的河**都有 ,s 在他们之后,就像你发布的上面的代码一样,我会做这样的事情:

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

【讨论】:

  • 谢谢回答。我已经编辑了我的帖子,因此没有河流**,并且名称是可变的。我能用这个做什么?提前谢谢。
【解决方案2】:

您在这里要做的是避免硬编码所需文件的名称。相反,从输入文件中收集。创建您需要写入的文件的字典,根据需要打开每个文件。像这样的东西(未经测试,可能需要一些调整):

 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()

【讨论】:

  • 我会稍微适应使用:outfiles.setdefault(tag, open('tag' + '.txt', 'w')).write(content + '\n') 而不是检查
  • 这将再次打开文件每次它都会点击setdefault(),因为open()会在传入之前进行评估。你可以继承dict并覆盖@ 987654326@ 不过!
  • 好点。不太清楚为什么当这是一个糟糕的建议时,这似乎是一个好主意:)......哦,好吧 - 我们有权一次又一次地打嗝!可惜它似乎起作用了......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多