Python 在文件中查找单词,返回定义

Python 在文件中查找单词,返回定义,python,regex,python-3.x,Python,Regex,Python 3.x,我正在制作一个小的字典应用程序,只是为了学习Python。我已经完成了添加单词的功能(只需要添加一个检查以防止重复),但我正在尝试创建查找单词的功能 这就是我在文本文件中添加单词时文本文件的外观 {word|Definition} 我可以通过这样做来检查这个词是否存在 if word in open("words/text.txt").read(): 但是我如何得到定义呢?我假设我需要使用正则表达式(这就是为什么我将其拆分并放在大括号中),我只是不知道如何使用。获取所有定义 f = open

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

这就是我在文本文件中添加单词时文本文件的外观

{word|Definition}
我可以通过这样做来检查这个词是否存在

if word in open("words/text.txt").read():
但是我如何得到定义呢?我假设我需要使用正则表达式(这就是为什么我将其拆分并放在大括号中),我只是不知道如何使用。

获取所有定义

f = open("words/text.txt")
for line in f:
  print f.split('|')[1]
获取所有定义

f = open("words/text.txt")
for line in f:
  print f.split('|')[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]
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]

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

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

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

如果大括号是文件的一部分,您也需要删除它们。如果大括号是文件的一部分,您也需要删除它们。这可能比您要查找的要复杂一些,但这是一项最好使用xml数据库处理的任务。@kylek确实需要更适合使用XML数据库或类似的东西。但目前的重点是学习语法,当我变得更好时,我可能会使用XML数据库重做。谁知道呢。这可能比您想要的要复杂一点,但这是一项最好使用xml数据库来处理的任务。@kylek它确实更适合使用xml数据库或类似的东西。但目前的重点是学习语法,当我变得更好时,我可能会使用XML数据库重做。谁知道呢。答案很好,像我这样的新手很容易理解。结尾的大括号不会被删除,但使用这一行。strip()[1:-1]会同时删除这两行。但由于每个条目都位于新行上,并且逐行读取,因此不需要大括号。如果我输入一个不存在的单词,它会返回“无”,这是从哪里来的?Python本身是否返回该值?噢,在for循环的末尾,如果没有显式返回任何值,Python将其视为无。要使
strip
正常工作,请记住
readlines()
在行尾也包含新行字符。所以你应该在要删除的字符中包含:
strip({}\n')
很好的答案,对我这样的新手来说很容易理解。结尾的大括号不会被删除,但使用这一行。strip()[1:-1]会同时删除这两行。但由于每个条目都位于新行上,并且逐行读取,因此不需要大括号。如果我输入一个不存在的单词,它会返回“无”,这是从哪里来的?Python本身是否返回该值?噢,在for循环的末尾,如果没有显式返回任何值,Python将其视为无。要使
strip
正常工作,请记住
readlines()
在行尾也包含新行字符。因此,您应该在要删除的字符中包括:
strip({}\n')