0

変更リクエスト/CR/バグのステータスを更新するという面倒な作業を自動化しようとしています。データベース スキーマは非常に複雑であるため、Web サーバーに curl コマンドを発行して、関連するステータスと共に CR のダンプをダウンロードすることにしました。私はos.system()呼び出しを行っていましたが、よりPythonicにしてpycurlを使用することにしました。問題は、ダウンロードしたcsvをディスクに書き込むときに、ファイルにアクセスしようとしてもファイルがまだ完成していないことだと思います(の直後c.perform())。エラーが表示されるため、これを信じるようになりましたlist index out of range。しかし、自分でファイルを開くと、すべてのデータがそこにあるように見えます。コード スニペットは次のとおりです (find_bugs メソッド内で、各行に分割を発行し、各行の関連する列にインデックスを付けます。

f = open(cr_file, 'w+')

c = pycurl.Curl()
c.setopt(c.URL, csv_url)
c.setopt(c.WRITEFUNCTION, f.write)
c.setopt(c.HTTPHEADER, headers)
c.perform()


with open(cr_file, 'r') as f:
  ids = find_bugs(f.readlines())

質問: 完了したらすぐにファイルにアクセスする必要がある場合、pycurl を使用してディスクに書き込むにはどうすればよいですか?

4

1 に答える 1

1

最初のファイル オブジェクトがフラッシュ/クローズされるまで、ファイルの内容がファイルに含まれていない可能性があります。

>>> f = open('text.csv', 'w+')
>>> f.write('asdf')
>>>
>>> f2 = open('text.csv', 'r')
>>> f2.read()
''
>>> f2.close()

close:

>>> f.close()
>>> f2 = open('text.csv', 'r')
>>> f2.read()
'asdf'

モードでファイルを開くため、w+そのファイル オブジェクトを使用してコンテンツを読み取ることができます。

with open(cr_file, 'w+') as f:
    c = pycurl.Curl()
    c.setopt(c.URL, csv_url)
    c.setopt(c.WRITEFUNCTION, f.write)
    c.setopt(c.HTTPHEADER, headers)
    c.perform()

    f.seek(0)
    ids = find_bugs(f.readlines())
于 2013-09-27T16:06:34.847 に答える