我试图使用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")
Run Code Online (Sandbox Code Playgroud)
这个代码段重复了很多次(少了文件打开),具有不同的搜索值,似乎有效:我得到了正确的消息,变量有值.
但是,使用下面的代码,第一个写入位置是错误的,而后续写入位置是正确的:
self.fh.seek(self.rstSnipStartFPtr,0)
self.fh.write(str);
sys.stdout.write("writing %s" % str )
self.rstSnipStartFPtr = self.fh.tell()
Run Code Online (Sandbox Code Playgroud)
我已经读过,由于Python倾向于"提前读取",传递某些read/ readline选项fh会导致错误的判断值.我看到避免这种情况的一个建议是读取整个文件并重写它,这在我的应用程序中不是一个非常有吸引力的解决方案.
如果我将第一个代码段更改为:
for line in self.fh.read() :
if ( p.search(line) ):
self.porSnipStartFPtr = self.fh.tell()
sys.stdout.write("found regPorSnip")
Run Code Online (Sandbox Code Playgroud)
然后它似乎self.fh.read()只返回字符而不是整行.搜索从不匹配.这似乎也适用于此self.fh.readline().
我的结论是,fh.tell在写操作后查询时只返回有效的文件位置.
有没有办法在阅读/搜索时提取准确的文件位置?
谢谢.