0

打开带有文件句柄的文件后,我的文件包含表格和其他数据。我想将它指向特定位置?例如,当我找到“引脚值”这个词时,它应该指向那里。如何指向文件中的特定位置?

4

3 回答 3

3

假设您需要文件句柄指向文件的指针指向字符串之前,'Pin value'您可以这样做:

您可以遍历文件中的行并使用该str.find()函数:

with open('filename') as f:
    for line in f
        if 'Pin value' in line:
            my_index = line.find('Pin value')
            f.seek(-len(line) + my_index, 1)

这将打开文件,逐行读取,并扫描每一行的“引脚值”。如果找到,它使用 str.find() 来定位它的第一个示例,然后按行长向后查找并转发到该字符串的开头,使文件句柄指向 'Pin 值中的 'P' 之前。第二个参数 ( 1) 表示file.seek()文件中的位置应该相对于当前位置进行调整。

处理多个实例有点棘手,但您可以使用相同的基本方法。

编辑:为了更清楚,此时,如果您从文件句柄中再读取一个字符,f您应该将字符'P'放入'Pin value'.

于 2013-09-04T09:02:07.860 回答
3

我假设您的意思是获取该短语所在的文件中行的字节索引。

您可以使用file.seek()

with open(file) as f: # open the file
    for line in f: # iterate the lines
        if 'Pin value' in line: # find the line you want
            f.seek(-len(line), 1) # moves the pointer to the start of the line
            print f.tell() # tells you the index of the byte you are at

这是一个函数:

def seek_to(file_handle, phrase):
    file_handle.seek(0) # reset to start
    for line in file_handle:
        if phrase in line:
            f.seek(-len(line)+line.find(phrase), 1)

你给函数一个 file_handle 和一个短语,它会将 file_handles 当前指针移动到短语之前的位置。并且什么也不做。

于 2013-09-04T08:53:25.630 回答
2

https://stackoverflow.com/a/4999741/248140展示了如何随机(非顺序)访问文件。但是请注意,您仍然需要确定 Pin 值”在文件中的位置,这意味着您必须在文件开头有某种索引,然后您就会危险地进入“我应该真的为这个“领域”使用适当的文件格式。

如果您可能希望一次将文件的所有内容都保存在内存中,请考虑在程序开始时读取文件并将其转换为最适合您的任何内部表示。

于 2013-09-04T08:53:45.633 回答