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()
read
特定の/readline
オプションを渡すfh
と、Python が「先読み」する傾向があるため、誤った Tell 値が発生する可能性があることを読みました。これを回避するために私が見た 1 つの提案は、ファイル全体を読み取って書き直すことですが、これは私のアプリケーションではあまり魅力的な解決策ではありません。
最初のコード スニペットを次のように変更した場合:
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
、書き込み操作の後にクエリを実行すると、有効なファイルの場所のみが返されるということです。
読み取り/検索時に正確なファイルの場所を抽出する方法はありますか?
ありがとう。