【问题标题】:search a file for a string and print relevant line from the file在文件中搜索字符串并从文件中打印相关行
【发布时间】:2014-09-06 03:54:50
【问题描述】:

我有两个文件。一个(e-number.txt)包含一个很长的物种列表和每个物种的一些信息,一个(artsliste.txt)包含来自某个位置的物种。 我想为 artliste.txt 中列出的所有物种提取 e-number.txt 中的信息。 打印相应的短线。

我觉得我已经很接近了,而且感觉不会太难,但我可能一开始就错了。

我拥有的最新代码:

ellenberg=open('e-number.txt').read()
arter=open('artsliste.txt','r')

for line in arter:
    art = arter.readline()
    if art in ellenberg:
        print(ellenberg)

artsliste.txt 包含如下内容:

槭树

槭树

海葵

黄花鱼

黑接骨木

荸荠

樟子松

e-number.txt 包含这样的内容:

Acaena novae-zelandiae 2527 . 8. 3. 6. 3. 0 Acae nova Acaena novae-zelandiae

Acer campestre 3 5 5 5 5 7 7 6 6 0 0 Acer camp Acer campestre

Acer platanoides 4 4 4 。 5. 7. 7 0 0 Acer plat Acer platanoides

Acer pseudoplatanus 5 4 4 6 5 。 6 7 6 0 0 Acer pseu Acer pseudoplatanus

我希望我的输出看起来像:

Acer pseudoplatanus 5 4 4 6 5 。 6 7 6 0 0 Acer pseu Acer pseudoplatanus

月见草 1363 。 7. 8. 6. 7. 1 月见草

三叶草培养基 2087 7 7 4 4 6 6 3 4 0 0 三叶草培养基

我觉得大多数功能可以打印找到的行,无论哪种方式,我想我都必须在我已经拥有的功能中设置另一个搜索功能,这没有任何意义。 希望有人能让我朝着正确的方向前进。 最好的问候。

【问题讨论】:

  • 您的文件有多大?它们能留在记忆中吗?你能从你的输入文件和所需的输出中显示几行吗?
  • for lineno, line in enumerate(filehandle)?
  • 哦,是的。对不起。 Enumber 为 100kb。 Artsliste 为 20kb。
  • 您应该阅读this question 的答案。另外,您应该澄清这个问题的问题是什么 - 这不是代码编写服务。

标签: python string file search


【解决方案1】:

来自readline 文档:

f.readline() 从文件中读取一行;换行符 (\n) 留在字符串的末尾

art = arter.readline().strip()

应该有帮助。

根据您的评论更新

试试这个:

for line in arter:
    art = arter.readline().strip()
    index = ellenberg.find(art)
    if index > -1:
        line_end_index = ellenberg.find('\n', index)
        print(ellenberg[index:line_end_index])

更多更新: 只有当行以art 开头时,此代码才会打印完整的相关行,否则它将打印从art 的入口点到行尾的块。

要打印整行,您可以使用以下代码:

ellenberg=open('e-number.txt').readlines()
arter=open('artsliste.txt','r')
for line in arter:
    for ellenberg_line in ellenberg:
        line = line.strip()
        if len(line) > 0 and line.strip() in ellenberg_line:
          print ellenberg_line

【讨论】:

  • 谢谢,这部分有效。问题是该行应该来自另一个文件。
  • 这是一个飞跃。我将其编辑为 print(ellenberg[index-22:line_end_index]) 以获取整行,这不是最好的方法,但它现在有效。稍后会继续。谢谢。
  • 它让我得到了物种名称前面的数字,虽然它不漂亮。
猜你喜欢
  • 2011-06-14
  • 2016-10-20
  • 1970-01-01
  • 2020-12-02
  • 1970-01-01
  • 1970-01-01
  • 2015-09-11
  • 2017-11-17
  • 1970-01-01
相关资源
最近更新 更多