2017-07-02 36 views
-3

我在與我的Python應用程序的問題我的應用程序是在指定時間從網絡上下載的視頻。我的程序名稱是tidopy.py ,但我得到這個錯誤:類型錯誤:參數1必須是字符串或緩衝區,而不是如

回溯(最近通話最後一個): 文件 「tidopy.py」,第29行,在 file.write(數據) 類型錯誤:參數1必須是字符串或緩衝區,而不是實例

我有問題,這部分:

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

X是用於視頻的數字的變量。

名稱列表是影片的名稱列表。

AddressList中是針對網絡視頻

我怎樣才能修復它的地址列表? 請幫忙。

+0

我想你只需要解決這個問題:'file.write(urllib2.urlopen(AddressList中[X])閱讀()。)'。讀取在urlopen上激活而不是寫入。 –

+0

你明白這條線做:'file.write(urllib2.urlopen(AddressList中[X]))閱讀()'? –

+2

這就是爲什麼你不應該在一條線上做四件不同的事情。 –

回答

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 

壓實你的代碼是你應該做的最後一個(最好是永遠)的事,因爲這使得它非常難以調試和妨礙可讀性。

相關問題