如何在文件中指定特定位置?

时间:2013-09-04 08:47:16

标签: python file

在打开带有文件句柄的文件后,

我的文件包含表格和其他数据。我想把它指向具体的位置?例如,当我找到“Pin值”这个词时,它应指向那里。 如何在文件中指定特定位置?

3 个答案:

答案 0 :(得分: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当前指针移动到短语之前的位置。别无其他。

答案 1 :(得分: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)

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

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

编辑:为了更清楚,此时,如果您从文件句柄f中再读一个字符,则应在'P'中获得字符'Pin value'

答案 2 :(得分:2)

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

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