Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何找到单词在文件中的位置?_Python - Fatal编程技术网

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

Python 如何找到单词在文件中的位置?,python,Python,例如,我有文件和单词“test”。文件部分为二进制文件,但具有字符串“test”。如何在不加载到内存的情况下查找文件中单词(索引)的位置?您可以使用和 内存映射文件对象的行为类似于字符串和文件 物体。但是,与普通字符串对象不同,这些对象是可变的。你 可以在大多数需要字符串的地方使用mmap对象用于 例如,您可以使用re模块搜索映射到的内存 文件。因为它们是可变的,所以您可以通过 执行obj[index]=“a”,或通过分配给切片来更改子字符串: obj[i1:i2]='…'。您还可以从开始读取和

例如,我有文件和单词“test”。文件部分为二进制文件,但具有字符串“test”。如何在不加载到内存的情况下查找文件中单词(索引)的位置?

您可以使用和

内存映射文件对象的行为类似于字符串和文件 物体。但是,与普通字符串对象不同,这些对象是可变的。你 可以在大多数需要字符串的地方使用mmap对象用于 例如,您可以使用re模块搜索映射到的内存 文件。因为它们是可变的,所以您可以通过 执行obj[index]=“a”,或通过分配给切片来更改子字符串: obj[i1:i2]='…'。您还可以从开始读取和写入数据 当前文件位置,并通过文件查找()到不同的 职位

范例

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()
试试这个:

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
打开(文件\u dmp\u路径,'rb')作为文件:
fsize=bsize=os.path.getsize(文件\u dmp\u路径)
word\u len=len(搜索词)
尽管如此:
p=file.read(bsize).find(搜索单词)
如果p>-1:
pos_dec=file.tell()-(bsize-p)
file.seek(pos_dec+word_len)
bsize=fsize-file.tell()
如果file.tell()
除非打开文件,否则无法在文件中找到文本的位置。这就像让一个人不睁开眼睛看报纸一样

回答你问题的第一部分,它相对简单

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

不将文件加载到内存是什么意思?你是说不打开它?我不知道怎么可能。。。你要求计算机告诉你某物在哪里,却看不见它。解释一下“不加载到内存中这个文件”是什么意思,因为如果你的意思是你所说的,你可能不知道计算机是如何工作的。你最后的限制是相当矛盾的。如果你不读,你怎么知道文件里有什么?如果您想避免一次性将大文件全部读入内存,可以尝试缓冲读取,但您仍然必须至少在第一次匹配中读取。如果比赛也跨越了缓冲区的末端,那就要小心了。