2017-07-02 19 views
-3

Ich habe ein Problem mit meiner App in Python meine App ist zum Herunterladen von Videos aus dem Web zu einem bestimmten Zeitpunkt. mein Name ist Programm tidopy.py aber ich bekomme diese Fehlermeldung:TypeError: Argument 1 muss Zeichenfolge oder Puffer sein, nicht Instanz

Traceback (jüngste Aufforderung zuletzt): File "tidopy.py", Zeile 29, in file.write (Daten) Typeerror: Argument 1 muss String oder Puffer, nicht Instanz sein

ich habe Problem mit diesem Teil:

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

x eine Variable für die Anzahl der Videos ist.

Namensliste ist eine Liste für den Namen von Videos.

Address ist eine Liste für die Adresse der Web-Videos

Wie kann ich es beheben? bitte helfen.

+0

Ich denke, Sie müssen nur das beheben: 'file.write (urllib2.urlopen (Adressliste [x]). Read())'. Das Lesen wird auf dem URLopen anstelle des Schreibens aktiviert. –

+0

Verstehen Sie, was diese Zeile macht: 'file.write (urllib2.urlopen (adressenliste [x])). Read()'? –

+2

Und deshalb sollten Sie nicht vier verschiedene Dinge in einer Zeile machen. –

Antwort

0

Hier ist ein einfacher Code, um einen Download von einer Liste durchzuführen.

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

Dies versucht nicht, das Problem zu lösen, und geht in eine völlig andere Richtung als der OP-Code. –

0

Diese Linie file.write(urllib2.urlopen(addresslist[x])).read() ist ein Mund voll (und auch die eine mit einem Fehler).

Split sie in kleine, gut lesbare Stücke wie folgt aus:

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 

Code Compacting ist der letzte (vorzugsweise nie), was Sie tun sollten, weil es extrem schwer zu debuggen macht und erschwert die Lesbarkeit.

Verwandte Themen