有一个文件(query.txt),它有一些关键字/短语,可以使用grep与其他文件匹配.以下代码的最后三行完美地工作,但是当在while循环中使用相同的命令时,它会进入无限循环或其他东西(即不响应).
import os
f=open('query.txt','r')
b=f.readline()
while b:
cmd='grep %s my2.txt'%b #my2 is the file in which we are looking for b
os.system(cmd)
b=f.readline()
f.close()
a='He is'
cmd='grep %s my2.txt'%a
os.system(cmd)
Run Code Online (Sandbox Code Playgroud)
首先,您没有正确地迭代文件.你可以简单地使用for b in f:没有.readline()东西.
一旦文件名包含任何在shell中具有特殊含义的字符,您的代码就会在您的脸上吹响.使用subprocess.call而不是os.system()传递参数列表.
这是一个固定版本:
import os
import subprocess
with open('query.txt', 'r') as f:
for line in f:
line = line.rstrip() # remove trailing whitespace such as '\n'
subprocess.call(['/bin/grep', line, 'my2.txt'])
Run Code Online (Sandbox Code Playgroud)
但是,您可以通过不调用来进一步改进代码grep.读取my2.txt字符串,然后使用该re模块执行搜索.如果你根本不需要正则表达式,你甚至可以简单地使用if line in my2_content
您的代码会扫描整个my2.txt文件以查找query.txt.
你想要:
试试这个代码:
with open('query.txt','r') as f:
queries = [l.strip() for l in f]
with open('my2.txt','r') as f:
for line in f:
for query in queries:
if query in line:
print query, line
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
52576 次 |
| 最近记录: |