Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在文件中搜索多个字符串(来自文件)并打印该行_Python_File_Search_Keyword - Fatal编程技术网

Python 在文件中搜索多个字符串(来自文件)并打印该行

Python 在文件中搜索多个字符串(来自文件)并打印该行,python,file,search,keyword,Python,File,Search,Keyword,再次为这里的noob道歉:尝试在下面的代码中搜索从关键字读取的多个字符串,在f中搜索并打印行。 如果我只有一个关键字,但如果我有多个关键字,它就不起作用了 keywords = input("Please Enter keywords path as c:/example/ \n :") keys = open((keywords), "r").readline() with open("c:/saad/saad.txt") as f: for line in f: if

再次为这里的noob道歉:尝试在下面的代码中搜索从关键字读取的多个字符串,在
f
中搜索并打印行。 如果我只有一个关键字,但如果我有多个关键字,它就不起作用了

keywords = input("Please Enter keywords path as c:/example/ \n :")
keys = open((keywords), "r").readline()
with open("c:/saad/saad.txt") as f:
    for line in f:
        if (keys) in line:
            print(line)

查找关键字的挑战之一是定义关键字的含义以及如何解析文件内容以查找完整的关键字集。如果“aa”是一个关键字,它应该匹配“aaa”还是“aa()”?关键字中可以有数字吗

一个简单的解决方案是,关键字只按字母顺序排列,应该完全匹配相邻的字母字符串,忽略大小写。此外,应该逐行考虑匹配,而不是逐句考虑匹配。我们可以使用正则表达式查找字母序列并设置以检查包含,如下所示:

keys.txt

test.txt

test.py

结果:

aa is good
AA is good
bb is good
为你所说的匹配添加更多规则,它会变得更复杂

编辑

假设您每行有一个关键字,您只需要子字符串匹配(即“aa”匹配“aaa”)而不是关键字搜索,您可以这样做

keyfile = "keys.txt"
testfile = "test.txt"

keys = [key for key in (line.strip() for line in open(keyfile)) if key]

with open(testfile) as f:
    for line in f:
        for key in keys:
            if key in line:
                print(line, end='')
                break
但我只是猜测你的标准是什么

keywords = input("Please Enter keywords path as c:/example/ \n :")
keys = open((keywords), "r").readline()
keys = keys.split(',')  # separates key strings
with open("c:/saad/saad.txt") as f:
    for line in f:
        for key in keys:
            if key.strip() in line:
                print(line)
您正在将该行作为一个字符串读取。您需要列出每个逗号分隔的字符串。然后测试每行的每个键(删除键周围的空格)

这是假设你的关键字文件是这样的:aa是好的,bb是好的,垃圾邮件,鸡蛋

#The Easiest one...
def strsearch():

  fopen = open('logfile.txt',mode='r+')

  fread = fopen.readlines()

  x = 'Product Name'

  y = 'Problem Description'

  z = 'Resolution Summary'

  for line in fread:

      #print(line)

       if x in line:

           print(line)

       if y in line:

           print(line)

       if z in line:

           print(line)

strsearch()

您能提供输入和预期输出吗?此关键字文件的格式是什么?一行上用空格分隔的一串单词?关键字(“aa”,“bb”):文件包含类似行的内容(aa很好,bb很好,cc不好):预期输出为:aa很好bb很好我已经尝试过了,但有几个问题;1.出于某种原因,它不会搜索任何东西,如果每行输入一个关键字,就像aa bb cc一样,如果我将关键字放在一行,那么它只返回bb 2。其次,如果我也想返回“aaa”,如果搜索“aa”关键字,那么您需要不同的为
re.findall()
函数租用[regular expression]。输入文件可以有多种格式,不可能涵盖所有的可能性。你可以像我在回答中那样在问题中放入示例。每行一个键,你可以逐行读取文件,去掉空白,然后过滤空值,如
keys=[key for key in(line.strip()for line in open(keyfile))if key]
。要匹配
“aaa”
,您需要执行子字符串搜索而不是正则表达式。谢谢@tdelany终于成功了,如果您可以打断这一行,只需再请求一次,我就有点问题了对其进行反编码key=[key for key in(line.strip()for line in open(keyfile))if key]您可以使用
[key.strip()用于打开的键(keyfile)]
读取和剥离每一行。但是,如果文件有空行,其中一个键将是空字符串。因此,您可以使用
[key.strip()用于打开的键(keyfile),如果key.strip()]
检查每一个键,或者您可以添加一个生成器
(key.strip()用于打开的键(keyfile))
仅执行一次剥离。
keyfile = "keys.txt"
testfile = "test.txt"

keys = [key for key in (line.strip() for line in open(keyfile)) if key]

with open(testfile) as f:
    for line in f:
        for key in keys:
            if key in line:
                print(line, end='')
                break
keywords = input("Please Enter keywords path as c:/example/ \n :")
keys = open((keywords), "r").readline()
keys = keys.split(',')  # separates key strings
with open("c:/saad/saad.txt") as f:
    for line in f:
        for key in keys:
            if key.strip() in line:
                print(line)
#The Easiest one...
def strsearch():

  fopen = open('logfile.txt',mode='r+')

  fread = fopen.readlines()

  x = 'Product Name'

  y = 'Problem Description'

  z = 'Resolution Summary'

  for line in fread:

      #print(line)

       if x in line:

           print(line)

       if y in line:

           print(line)

       if z in line:

           print(line)