2017-07-02 9 views
-3

私のアプリはPythonで問題を抱えています。私のアプリは指定された時刻にWebからビデオをダウンロードします。私のプログラム名は tidopy.pyですが、私はこのエラーを取得:引数: file.write(データ) はTypeErrorに ファイル "tidopy.py"、29行目、:TypeError:引数1は、インスタンスではなく文字列またはバッファでなければなりません。

トレースバック(最後の最新のコール)

while (coun > x): 
    file = open(namelist[x], 'wb') 
    file.write(urllib2.urlopen(addresslist[x])).read() 
    file.close() 
    x = x + 1 

Xは、動画の数の変数である:1、私はこの部分で問題を抱えている文字列やバッファではなく、インスタンス

でなければなりません。

名前リストは、動画の名前のリストです。

アドレスリストは、ウェブ動画のアドレス、私はそれを修正するにはどうすればよい

ためのリストですか? 助けてください。

+0

私はこれを修正する必要があると思います: 'file.write(urlib2.urlopen(addresslist [x])。read())'。読み込みは書き込みの代わりにurlopenで有効になります。 –

+0

この行が何をしているのか理解していますか? 'file.write(urllib2.urlopen(addresslist [x]))。read()'? –

+2

そのため、1つの行で4つの異なることを行うべきではありません。 –

答えて

0

ここでは、リストからダウンロードを実行するための簡単なコードを示します。

import requests 
import shutil 

namelist = [...] 
addresslist = [...] 

for k, x in enumerate(namelist): 
    r = requests.get(x, stream=True) 
    if r.ok: 
     with open(addresslist[k], 'wb') as f: 
      r.raw.decode_content = True 
      shutil.copyfileobj(r.raw, f) 
+0

これは問題を解決しようとせず、OPのコードとはまったく異なる方向に進みます。 –

0

この行file.write(urllib2.urlopen(addresslist[x])).read()は一口です(エラーのあるものもあります)。

このような小さな、読みやすいチャンクに分割してアップ:それはデバッグに非常に難しいことになりますし、読みやすさを妨げるので

address = addresslist[x] 
request = urllib2.urlopen(address) # create a request object 
html = request.read() # make the request (call read on the request object, not as you were doing before) 
file.write(html) # write the response 

はあなたのコードを圧縮は、あなたがすべき最後の(好ましくは決して)のものです。

関連する問題