2

過去の株価をダウンロードして処理するためのスクリプトに取り組んでいます。urllib.request.urlopenを使用すると、すべてのファイル(b'\ xef \ xbb \ xbf)に、urllib.request.urlretrieveを使用したときに存在しなかった、またはurlを入力したときに存在しなかった奇妙なテキストプレフィックスが表示されました。ブラウザ(Firefox)。答えはありますが、そもそもなぜそれが問題を引き起こしていたのかわかりません。文字列に強制したためかもしれませんが、それがなぜなのか、それをどのように回避するのか(代わりにurlretrieveを使用する以外)はわかりません。コードは以下のとおりです。関連する行は11行目です。後のコメント付きコードは、orlopenを使用していたときのものです。

    #download a bunch of historical stock quotes from google finance

import urllib.request
symbolarray = []
symbolfile = open("symbols.txt")
for line in symbolfile:
    symbolarray.append(line.strip())
symbolfile.close()

for symbol in symbolarray:
    page = urllib.request.urlretrieve("http://www.google.com/finance/historical?q=NYSE:"+symbol+"&output=csv",symbol+".csv")
    #datafile = open(symbol+".csv","w")
    #datafile.write(str(page.read()))
    #datafile.close()
4

1 に答える 1

3

0xEF、0xBB、0xBFはutf-8のBOMです。これは、utf-8でエンコードされた文字列であることを意味します。Wiresharkを使用すると、ずっとそこにあったことがわかると思います。ほとんどのプログラムがそれを無視しているだけです。

代わりに、BOMを削除したい場合str(page.read())は試してみてください。page.read().decode('utf-8-sig')保持したい場合は、「utf-8」だけでデコードできます。

于 2011-03-04T23:17:39.237 に答える