例如我有文件和单词“test”。 file是部分二进制文件,但有字符串“test”。如何在无负载的文件中找到单词(索引)的位置来存储该文件?
答案 0 :(得分:6)
除非您打开文件,否则无法在文件中找到文本的位置。这就像是要求某人在不睁开眼睛的情况下阅读报纸。
要回答问题的第一部分,这是相对简单的。
with open('Path/to/file', 'r') as f:
content = f.read()
print content.index('test')
答案 1 :(得分:2)
您可以使用memory-mapped files和regular expressions。
内存映射文件对象的行为类似于字符串和类似文件 对象。然而,与普通的字符串对象不同,这些是可变的。您 可以在大多数需要字符串的地方使用mmap对象; 作为 例如,您可以使用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()
答案 2 :(得分: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