我的文件包含表格和其他数据。我想把它指向具体的位置?例如,当我找到“Pin值”这个词时,它应指向那里。 如何在文件中指定特定位置?
答案 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 ,这意味着您必须在文件的开头有一些索引,然后您就是危险地陷入“我应该为这个领域使用适当的文件格式。”
如果您可能希望一次将该文件的所有内容都包含在内存中,请考虑在程序开头读取该文件并将其转换为最适合您的内部表示。