web-dev-qa-db-ja.com

cPickleオブジェクトを書き込もうとしたが、 'write'属性タイプエラーが発生する

インターネットで見つけたコードをiPythonで適用しようとすると、エラーが発生します。

TypeError                                 Traceback (most recent call last)
    <ipython-input-4-36ec95de9a5d> in <module>()
     13     all[i] = r.json()
     14 
---> 15 cPickle.dump(all, outfile)

TypeError: argument must have 'write' attribute

これが私が順番に行ったことです:

outfile = "C:\John\Footy Bants\R COMPLAEX MATHS"

次に、次のコードを貼り付けました。

import requests, cPickle, shutil, time

all = {}
errorout = open("errors.log", "w")

for i in range(600):
    playerurl = "http://fantasy.premierleague.com/web/api/elements/%s/"
    r = requests.get(playerurl % i)

    # skip non-existent players
    if r.status_code != 200: continue

    all[i] = r.json()

cPickle.dump(all, outfile)

これが私が達成しようとしていることのアイデアを与えるための元の記事です:

http://billmill.org/fantasypl/

19
Johnliquid

cPickle.dump()の2番目の引数は、ファイルオブジェクトでなければなりません。代わりにファイル名を含む文字列を渡しました。

open()関数を使用してそのファイル名のファイルオブジェクトを開き、そのファイルオブジェクトをcPickleに渡す必要があります。

with open(outfile, 'wb') as pickle_file:
    cPickle.dump(all, pickle_file)

Pythonチュートリアルの__ ファイルの読み取りと書き込みセクション を参照してください。withを使用する理由も含まれますファイルを開くときは良い考えです(自動的に閉じられます)。

32
Martijn Pieters