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

时间:2011-08-08 10:43:58

标签: python

例如我有文件和单词“test”。 file是部分二进制文件,但有字符串“test”。如何在无负载的文件中找到单词(索引)的位置来存储该文件?

3 个答案:

答案 0 :(得分:6)

除非您打开文件,否则无法在文件中找到文本的位置。这就像是要求某人在不睁开眼睛的情况下阅读报纸。

要回答问题的第一部分,这是相对简单的。

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

答案 1 :(得分:2)

您可以使用memory-mapped filesregular 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