此代码用于打印包含给定字符串的行号:
import os
f = open('document.xml', 'r+')
for (i, line) in enumerate(f, start=1):
if "<w:t>Omg" in line: print(i)
但我想知道在字符串开始之前文档中有多少字符。所以我认为是一个聪明人,并将其改为:
import os
f = open('document.xml', 'r+')
for (i, line) in enumerate(f, start=1):
if "<w:t>Omg" in line: print(f.tell())
但这会引发错误:
if "<w:t>Omg" in line: print(f.tell())
OSError: telling position disabled by next() call
我不能将行号用于我想要做的事情,因为它必须使用生成的xml文档,而不使用换行符。
答案 0 :(得分:2)
循环更新文件位置:
target = "<w:t>Omg"
offset = 0
for line in f:
if target in line:
print(offset + line.find(target))
offset += len(line)
或者,不依赖于文件上的迭代(使用next
),并使用文件对象的readline
或read
方法;然后,您可以使用file.tell
方法。
target = "<w:t>Omg"
offset = 0
while True:
offset = f.tell()
line = f.readline()
if not line:
break
if target in line:
print(offset + line.find(target))