2017-02-17 5 views
0

J'utilise le module urllib2 en Python 2.7 en utilisant Spyder 3.0 fichiers texte de téléchargement par lots en lisant un fichier texte qui contient une liste d'entre eux (?):Python ValueError: type url inconnue: l'espace

reload(sys) 
    sys.setdefaultencoding('utf-8') 
    with open('ocean_not_templated_url.txt', 'r') as text: 
     lines = text.readlines() 
     for line in lines: 
      url = urllib2.urlopen(line.strip('ï \xa0\t\n\r\v')) 
      with open(line.strip('\n\r\t ').replace('/', '!').replace(':', '~'), 'wb') as out: 
       for d in url: 
        out.write(d) 

Je l'ai déjà découvert un tas de personnages étranges dans les urls que je l'ai depuis dépouillé, cependant, le script échoue lorsque près de 90% complet, ce qui donne l'erreur suivante:

enter image description here

Je pensais que ce soit un espace insécable (noté \ xa0 dans le code), mais il échoue toujours. Des idées?

Répondre

1

C'est une URL étrange!

Spécifiez le protocole de communication sur le réseau. Essayez de préfixer l'URL avec http:// et les noms de domaine si le fichier existe sur le WWW.

Les fichiers résident toujours quelque part, dans le répertoire d'un serveur ou localement sur votre système. Donc, il doit y avoir un chemin réseau à ces fichiers, par exemple:

http://127.0.0.1/folder1/samuel/file1.txt

Même exemple, avec localhost étant un alias pour 127.0.0.1 (en général)

http://localhost/folder1/samuel/file1.txt

Cela pourrait résoudre le problème. Il suffit de penser à l'endroit où votre fichier existe et comment il doit être adressée ...


Mise à jour:

J'ai expérimenté un peu à ce sujet. Je pense que je sais pourquoi cette erreur est soulevée! : D

I speculate that your file which stores the URL's actually has a sneakyempty line near the end. I can say it's near the end as you said that it executes about 90% of it and then fails. So, the python urllib2 function get_type is unable to process that empty url and throws unknown url type:

Je pense que c'est le problème! Supprimez cette ligne vide dans le fichier ocean_not_templated_url.txt et essayez-le!

Il suffit de vérifier et faites le moi savoir! : P

+0

Hmm .. où dois-je spécifier le protocole? Merci pour la suggestion, au fait. – snl330

+0

@Samuel J'ai mis à jour la réponse. Vérifiez-le! – varun

+0

Je vois. Merci pour la réponse détaillée !! Le préfixe 'http: //' existe déjà dans la liste des URL du fichier texte, par exemple 'http://www1.ncdc.noaa.gov/pub/data/paleo/paleocean/sediment_files/complete/e49-23 -tab.txt'. (Ils sont sur un serveur ftp.) Est-il possible que _if_ certaines de ces URL ne soient plus utilisées que cela cause le problème? Je sais qu'ils ont été déplacés par nos gestionnaires de données, et certains sont assez vieux. Merci encore. – snl330