如果字符串在文本文件中,如何在 Python 中检查并打印该行?

Posted

技术标签:

【中文标题】如果字符串在文本文件中,如何在 Python 中检查并打印该行?【英文标题】:How to check in Python if string is in a text file and print the line? 【发布时间】:2013-05-02 04:24:03 【问题描述】:

我要做的是检查是否在文本文件中找到了这个字符串。如果是,我希望它打印出该行,否则打印出一条消息。

到目前为止,我已经实现了这段代码:

 def check_string(string):

     w = raw_input("Input the English word: ")
        if w in open('example.txt').read():
            for w.readlines():
                print line
        else:
            print('The translation cannot be found!')

我尝试过实现它,但出现语法错误。

上面写着:

行中的无效语法 -- 对于 w.readlines():

知道如何使用这行代码吗?

【问题讨论】:

请发布您的错误信息 如果check_string 也使用raw_input 来获取您要查找的单词,为什么还要接受参数? 它在该行显示无效语法 -- for w.readlines(): 在其他问题中,您的缩进已关闭。 你听说过grep吗? 【参考方案1】:

你应该试试这样的:

import re
def check_string():
    #no need to pass arguments to function if you're not using them
    w = raw_input("Input the English word: ")

    #open the file using `with` context manager, it'll automatically close the file for you
    with open("example.txt") as f:
        found = False
        for line in f:  #iterate over the file one line at a time(memory efficient)
            if re.search("\b0\b".format(w),line):    #if string found is in current line then print it
                print line
                found = True
        if not found:
            print('The translation cannot be found!')

check_string() #now call the function

如果您正在搜索确切的单词而不仅仅是子字符串,那么我建议在这里使用regex

例子:

>>> import re
>>> strs = "foo bar spamm"
>>> "spam" in strs        
True
>>> bool(re.search("\b0\b".format("spam"),strs))
False

【讨论】:

你为什么不改用re?这样,你就有了更多的控制权。此外,这种方法的问题在于它不会匹配跨多行的字符串。不过仍然是一个很好的答案。 +1 :) @AshwiniChaudhary 感谢您的代码,我已尝试运行它,但似乎没有任何反应。甚至没有提示我输入。我已经把代码文件和文本文件放在同一个目录下。 @user1433571 您必须调用该函数才能使其工作。试试看:check_string() @AshwiniChaudhary 谢谢,它有效!我如何使用正则表达式搜索确切的字符串?我对 Python 很陌生,所以仍然掌握它的窍门。另外,如果我要查找的字符串也存在于另一行中,我是否也将其打印出来呢?提前致谢!【参考方案2】:

下面是一个使用in 运算符的简单示例:

w = raw_input("Input the English word: ") # For Python 3: use input() instead
with open('foo.txt') as f:
    found = False
    for line in f:
        if w in line: # Key line: check if `w` is in the line.
            print(line)
            found = True
    if not found:
        print('The translation cannot be found!')

如果您想知道字符串的位置,那么您可以使用find() 而不是in 运算符。

【讨论】:

以上是关于如果字符串在文本文件中,如何在 Python 中检查并打印该行?的主要内容,如果未能解决你的问题,请参考以下文章

我如何在 Python (2.72) 上打开一个文本文件中的行

从client(content="<p></p>")中检測到有潜在危急的 Request.Form 值。

如何在python中读取带有特殊字符的文本文件

如何使用Python将某些字符串从文本文件复制到Word doc?

如何使用 Python 结合正则表达式和字符串/文件操作在文本文件中搜索模式并存储模式的实例?

Python在文本文件中保存长字符串