如何在文件中查找单词位置?

7 投票
3 回答
36516 浏览
提问于 2025-04-16 23:07

比如我有一个文件,里面有一个词“test”。这个文件部分是二进制的,但里面有字符串“test”。我想知道这个词在文件中的位置(索引),而不想把整个文件加载到内存里,应该怎么做呢?

3 个回答

2

试试这个:

with open(file_dmp_path, 'rb') as file:
fsize = bsize = os.path.getsize(file_dmp_path)
word_len = len(SEARCH_WORD)
while True:
    p = file.read(bsize).find(SEARCH_WORD)
    if p > -1:
        pos_dec = file.tell() - (bsize - p)
        file.seek(pos_dec + word_len)
        bsize = fsize - file.tell()
    if file.tell() < fsize:
        seek = file.tell() - word_len + 1
        file.seek(seek)
    else:
        break
2

你可以使用 内存映射文件正则表达式

内存映射文件对象既像字符串,又像文件对象。不过,它们和普通字符串不一样的是,这些对象是可变的,也就是说你可以修改它们。你可以在大多数需要字符串的地方使用内存映射对象;比如,你可以用 re 模块在内存映射文件中搜索内容。因为它们是可变的,你可以通过像 obj[index] = 'a' 这样的方式来改变一个字符,或者通过给切片赋值来改变一段字符串:obj[i1:i2] = '...'。你还可以从当前文件位置开始读写数据,并通过 seek() 方法在文件中跳转到不同的位置。

示例

import re
import mmap

f = open('path/filename', 'r+b')
mf = mmap.mmap(f.fileno(), 0)
mf.seek(0) # reset file cursor
m = re.search('pattern', mf)
print m.start(), m.end()
mf.close()
f.close()
10

你无法在不打开文件的情况下找到文件中某段文字的位置。这就像是让人看报纸,但不睁眼一样。

至于你问题的第一部分,实际上是比较简单的。

with open('Path/to/file', 'r') as f:
    content = f.read()
    print content.index('test')

撰写回答