4

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、書き込み操作の後にクエリを実行すると、有効なファイルの場所のみが返されるということです。

読み取り/検索時に正確なファイルの場所を抽出する方法はありますか?

ありがとう。

4

2 に答える 2

0

私は問題を理解していないと思います

>>> fh = open('test.txt')
>>> fh.tell()
0L
>>> fh.read(1)
'"'
>>> fh.tell()
1L
>>> fh.read(5)
'a" \n"'
>>> fh.tell()
7L
于 2013-11-01T16:24:04.510 に答える