如何在文件中查找单词位置?
比如我有一个文件,里面有一个词“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')