使用python查找大文件中最后一个单词

hat*_*hat 4 python text

我有一个非常大的文本文件.我想搜索特定单词的最后一次出现,然后对其后面的行执行某些操作.

我可以这样做:

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)


And*_*dge 5

如果文件大小为数百兆甚至千兆字节,那么您可能需要使用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()


Rah*_*thi 4

尝试这样:

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。