2017-07-02 7 views
-3

J'ai un problème avec mon application en python mon application est pour télécharger des vidéos sur le web à un moment précis. mon nom de programme est tidopy.py mais je reçois cette erreur:TypeError: l'argument 1 doit être une chaîne ou un tampon, pas une instance

retraçage (appel le plus récent en dernier): Fichier "tidopy.py", ligne 29, en file.write (données) TypeError: Argument 1 doit être une chaîne ou d'un tampon, et non par exemple

J'ai problème avec cette partie:

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

x est une variable pour le nombre de vidéos.

namelist est une liste pour le nom des vidéos.

addresslist est une liste pour l'adresse de vidéos web

Comment puis-je résoudre ce problème? aidez s'il vous plaît.

+0

Je pense que vous avez juste besoin de corriger ceci: 'file.write (urllib2.urlopen (liste d'adresses [x]). Read())'. la lecture est activée sur l'urlopen au lieu de l'écriture. –

+0

Comprenez-vous ce que fait cette ligne: 'file.write (urllib2.urlopen (liste d'adresses [x])). Read()'? –

+2

Et c'est pourquoi vous ne devriez pas faire quatre choses différentes dans une seule ligne. –

Répondre

0

Voici un code simple pour effectuer un téléchargement à partir d'une liste.

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

Cela ne tente pas de résoudre le problème et va dans une direction complètement différente du code OP. –

0

Cette ligne file.write(urllib2.urlopen(addresslist[x])).read() est une bouchée (et aussi celui avec une erreur).

le diviser en petits morceaux lisibles comme ceci:

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 

Compactage votre code est le dernier (de préférence jamais) chose que vous devez faire, car il est extrêmement difficile de déboguer et empêche la lisibilité.