我正在尝试使用 Python 从现有文件中提取多个位置。这是我当前用于提取位置的代码:
self.fh = open( fileName , "r+")
p = re.compile('regGen regPorSnip begin')
for line in self.fh :
if ( p.search(line) ):
self.porSnipStartFPtr = self.fh.tell()
sys.stdout.write("found regPorSnip")
这段代码使用不同的搜索值重复了多次(打开的文件更少),并且似乎有效:我得到了正确的消息,并且变量具有值。
但是,使用下面的代码,第一个写入位置是错误的,而随后的写入位置是正确的:
self.fh.seek(self.rstSnipStartFPtr,0)
self.fh.write(str);
sys.stdout.write("writing %s" % str )
self.rstSnipStartFPtr = self.fh.tell()
我已经读过,由于 Python 倾向于“提前阅读” ,传递某些read
/readline
选项可能会导致错误的告诉值。fh
我看到的一个避免这种情况的建议是读取整个文件并重写它,这在我的应用程序中不是一个非常吸引人的解决方案。
如果我将第一个代码段更改为:
for line in self.fh.read() :
if ( p.search(line) ):
self.porSnipStartFPtr = self.fh.tell()
sys.stdout.write("found regPorSnip")
然后它似乎self.fh.read()
只返回字符而不是整行。搜索永远不会匹配。对于self.fh.readline()
.
我的结论是,fh.tell
只有在写操作后查询时才返回有效的文件位置。
有没有办法在阅读/搜索时提取准确的文件位置?
谢谢。