我有一个非常大的文本文件.我想搜索特定单词的最后一次出现,然后对其后面的行执行某些操作.
我可以这样做:
if "word" in line.split():
do something
Run Code Online (Sandbox Code Playgroud)
我只对最后一次出现感兴趣"word".
小智 5
那么更简单快捷的解决方案是以相反的顺序打开文件,然后搜索第一个单词位置.
在python 2.6中你可以做类似的事情(其中word是你正在寻找的字符串)
for line in reversed(open("filename").readlines()):
if word in line:
# Do the operations here when you find the line
Run Code Online (Sandbox Code Playgroud)
如果文件大小为数百兆甚至千兆字节,那么您可能需要使用mmap,这样就不必将整个文件读入内存。rfind方法查找文件中最后一次出现的字符串。
import mmap
with open('large_file.txt', 'r') as f:
# memory-map the file, size 0 means whole file
m = mmap.mmap(f.fileno(), 0, prot=mmap.PROT_READ)
# prot argument is *nix only
i = m.rfind('word') # search for last occurrence of 'word'
m.seek(i) # seek to the location
line = m.readline() # read to the end of the line
print line
nextline = m.readline()
Run Code Online (Sandbox Code Playgroud)
只要继续打电话readline()阅读以下几行即可。
如果文件非常大(例如数十 GB),那么您可以使用长度和偏移参数将其映射为块mmap()
尝试这样:
f = open('file.txt', 'r')
lines = f.read()
answer = lines.find('word')
Run Code Online (Sandbox Code Playgroud)
然后你可以从中选择最后一个词
您还可以使用str.rfind
str.rfind(sub[, start[, end]])
Run Code Online (Sandbox Code Playgroud)
返回字符串中找到子字符串 sub 的最高索引,使得 sub 包含在 s[start:end] 中。可选参数 start 和 end 被解释为切片符号。失败时返回-1。