【发布时间】:2013-11-01 16:19:25
【问题描述】:
我正在尝试使用 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")
这个 sn-p 使用不同的搜索值重复多次(打开文件较少),并且似乎有效:我得到了正确的消息,并且变量具有值。
但是,使用下面的代码,第一个写入位置是错误的,而后面的写入位置是正确的:
self.fh.seek(self.rstSnipStartFPtr,0)
self.fh.write(str);
sys.stdout.write("writing %s" % str )
self.rstSnipStartFPtr = self.fh.tell()
我已经读过,将某些 read/readline 选项传递给 fh 可能会导致错误的告诉值,因为 Python 倾向于“预读”。我看到的一个避免这种情况的建议是读取整个文件并重写它,这在我的应用程序中不是一个非常吸引人的解决方案。
如果我将第一个代码 sn-p 更改为:
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 仅在写入操作后查询时返回有效的文件位置。
有没有办法在读取/搜索时提取准确的文件位置?
谢谢。
【问题讨论】: