Python 解析一个巨大的文本文件并在匹配后获得下一行和上一行
我有一个大约500 MB的巨大文本文件,我需要打印与输入匹配的行,以及前3行和后3行 我的文本文件如下所示:Python 解析一个巨大的文本文件并在匹配后获得下一行和上一行,python,Python,我有一个大约500 MB的巨大文本文件,我需要打印与输入匹配的行,以及前3行和后3行 我的文本文件如下所示: ... ... ... benz is a nice car ... ... ... its also said benz is a safe car ... ... ... 如果用户输入为“benz”,则应打印匹配前后的3行,用于每个单独的匹配 我的代码:- users= raw_input('enter the word:') with open('mytext.txt',rb)
...
...
...
benz is a nice car
...
...
...
its also said benz is a safe car
...
...
...
如果用户输入为“benz”,则应打印匹配前后的3行,用于每个单独的匹配
我的代码:-
users= raw_input('enter the word:')
with open('mytext.txt',rb) as f:
for line if f:
if users in line:
print line(i-3)
print line
print line(i+3)
但我未定义的错误使用:
使用:
使用:
使用:
我编写了一个可能对您的案例有用的小函数:
from collections import deque
def search_cont(filename, search_for, num_before, num_after):
with open(filename) as f:
before_lines = deque(maxlen=num_before)
after_lines = deque(maxlen=num_after+1)
for _ in range(num_after+1):
after_lines.append(next(f))
while len(after_lines)>0:
current_line = after_lines.popleft()
if search_for in current_line:
print("".join(before_lines))
print(current_line)
print("".join(after_lines))
print("-----------------------")
before_lines.append(current_line)
try:
after_lines.append(next(f))
except StopIteration:
pass
举个例子,你把它叫做
search_for = raw_input('enter the word:')
search_cont('mytext.txt', search_for, 3, 3)
此解决方案没有文件大小的上限(除非您有很长的行),因为内存中的行数从未超过7行。我编写了一个可能对您的情况有用的小函数:
from collections import deque
def search_cont(filename, search_for, num_before, num_after):
with open(filename) as f:
before_lines = deque(maxlen=num_before)
after_lines = deque(maxlen=num_after+1)
for _ in range(num_after+1):
after_lines.append(next(f))
while len(after_lines)>0:
current_line = after_lines.popleft()
if search_for in current_line:
print("".join(before_lines))
print(current_line)
print("".join(after_lines))
print("-----------------------")
before_lines.append(current_line)
try:
after_lines.append(next(f))
except StopIteration:
pass
举个例子,你把它叫做
search_for = raw_input('enter the word:')
search_cont('mytext.txt', search_for, 3, 3)
此解决方案没有文件大小的上限(除非您有很长的行),因为内存中的行数从未超过7行。我编写了一个可能对您的情况有用的小函数:
from collections import deque
def search_cont(filename, search_for, num_before, num_after):
with open(filename) as f:
before_lines = deque(maxlen=num_before)
after_lines = deque(maxlen=num_after+1)
for _ in range(num_after+1):
after_lines.append(next(f))
while len(after_lines)>0:
current_line = after_lines.popleft()
if search_for in current_line:
print("".join(before_lines))
print(current_line)
print("".join(after_lines))
print("-----------------------")
before_lines.append(current_line)
try:
after_lines.append(next(f))
except StopIteration:
pass
举个例子,你把它叫做
search_for = raw_input('enter the word:')
search_cont('mytext.txt', search_for, 3, 3)
此解决方案没有文件大小的上限(除非您有很长的行),因为内存中的行数从未超过7行。我编写了一个可能对您的情况有用的小函数:
from collections import deque
def search_cont(filename, search_for, num_before, num_after):
with open(filename) as f:
before_lines = deque(maxlen=num_before)
after_lines = deque(maxlen=num_after+1)
for _ in range(num_after+1):
after_lines.append(next(f))
while len(after_lines)>0:
current_line = after_lines.popleft()
if search_for in current_line:
print("".join(before_lines))
print(current_line)
print("".join(after_lines))
print("-----------------------")
before_lines.append(current_line)
try:
after_lines.append(next(f))
except StopIteration:
pass
举个例子,你把它叫做
search_for = raw_input('enter the word:')
search_cont('mytext.txt', search_for, 3, 3)
此解决方案没有文件大小的上限(除非您有很长的行),因为内存中的行数从未超过7行。您可以从python调用
grep
:
import subprocess
result = subprocess.check_output(["grep" "-A" "3" "-B" "3" "benz" "mytext.txt"])
您可以从python调用
grep
:
import subprocess
result = subprocess.check_output(["grep" "-A" "3" "-B" "3" "benz" "mytext.txt"])
您可以从python调用
grep
:
import subprocess
result = subprocess.check_output(["grep" "-A" "3" "-B" "3" "benz" "mytext.txt"])
您可以从python调用
grep
:
import subprocess
result = subprocess.check_output(["grep" "-A" "3" "-B" "3" "benz" "mytext.txt"])
我想要python版本的!为什么要重新发明轮子?我如何用python实现它?因为它将成为我代码的一部分!请提供帮助,而不是同时使用
-a3
和-b3
选项。您可以将这两个选项与-c3
结合使用,我希望在python中使用它!为什么要重新发明轮子?我如何用python实现它?因为它将成为我代码的一部分!请提供帮助,而不是同时使用-a3
和-b3
选项。您可以将这两个选项与-c3
结合使用,我希望在python中使用它!为什么要重新发明轮子?我如何用python实现它?因为它将成为我代码的一部分!请提供帮助,而不是同时使用-a3
和-b3
选项。您可以将这两个选项与-c3
结合使用,我希望在python中使用它!为什么要重新发明轮子?我如何用python实现它?因为它将成为我代码的一部分!请帮助代替@Lutz Horn建议的-a3
和-b3
选项,您可以将两者结合使用-c3
,grep是一个不错的选择。你自己做,你会用不必要的代码束缚自己,很可能让它像一只没有腿的狗一样运行。格雷普已经有一段时间了。它是用来搜索文本文件的。如果你正在搜索文本,而grep做了你所需要的一切,这是一个很好的选择。正如@Lutz Horn所建议的,grep是一个很好的选择。你自己做,你会用不必要的代码束缚自己,很可能让它像一只没有腿的狗一样运行。格雷普已经有一段时间了。它是用来搜索文本文件的。如果你正在搜索文本,而grep做了你所需要的一切,这是一个很好的选择。正如@Lutz Horn所建议的,grep是一个很好的选择。你自己做,你会用不必要的代码束缚自己,很可能让它像一只没有腿的狗一样运行。格雷普已经有一段时间了。它是用来搜索文本文件的。如果你正在搜索文本,而grep做了你所需要的一切,这是一个很好的选择。正如@Lutz Horn所建议的,grep是一个很好的选择。你自己做,你会用不必要的代码束缚自己,很可能让它像一只没有腿的狗一样运行。格雷普已经有一段时间了。它是用来搜索文本文件的。如果您正在搜索文本,而grep做了所有您需要的事情,那么它是一个很好的选择。