【问题标题】:Find word in file, return definition在文件中查找单词,返回定义
【发布时间】:2013-10-22 03:14:14
【问题描述】:

我正在制作一个小型字典应用程序,只是为了学习 Python。我已经完成了添加单词的功能(只需要添加一个检查以防止重复),但我正在尝试创建查找单词的功能。

当我将单词附加到文本文件时,这就是我的文本文件的样子。

{word|Definition}

我可以通过这样做来检查这个词是否存在,

if word in open("words/text.txt").read():

但是我如何获得定义呢?我假设我需要使用正则表达式(这就是为什么我将它拆分并将其放在花括号内),我只是不知道如何。

【问题讨论】:

  • 这可能比您想的要复杂一些,但最好使用 xml 数据库来处理这项任务。
  • @kylek 它确实更适合使用 XML 数据库或类似的东西。但目前的重点是学习语法,当我变得更好时,我可能会使用 XML DB 重做。谁知道呢。

标签: python regex python-3.x


【解决方案1】:

read() 将读取整个文件内容。你可以这样做:

for line in open("words/text.txt", 'r').readlines():
    split_lines = line.strip('{}').split('|')
    if word == split_lines[0]: #Or word in line would look for word anywhere in the line
        return split_lines[1]

【讨论】:

  • 很好的答案,对于像我这样的新手来说很容易理解。结尾的花括号没有被剥离,但使用这个 line.strip()[1:-1] 它会删除两者。但是由于每个条目都在一个新行上并且它逐行读取,因此不需要花括号。如果我输入一个不存在的单词,它会返回“None”,这是从哪里来的? Python 本身会返回吗?
  • 如果没有明确返回,则在 for 循环结束时,python 将其视为 None 。
  • 要让strip 工作,请记住readlines() 在行尾也包含换行符。因此,您应该将其包含在要删除的字符中:strip('{}\n')
【解决方案2】:

如果您想要有效的搜索,您可以使用字典。

with open("words/text.txt") as fr:
    dictionary = dict(line.strip()[1:-1].split('|') for line in fr)
print(dictionary.get(word))

同时尽量避免使用如下语法:

if word in open("words/text.txt").read().

使用上下文管理器(with 语法)确保文件将被关闭。

【讨论】:

    【解决方案3】:

    获取所有定义

    f = open("words/text.txt")
    for line in f:
      print f.split('|')[1]
    

    【讨论】:

    • 如果花括号是文件的一部分,您也需要删除它们。
    猜你喜欢
    • 2013-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-31
    • 2023-03-15
    • 2012-04-15
    相关资源
    最近更新 更多