Python - urlretrieve - nom de fichier

Python - urlretrieve - nom de fichier - Python - Programmation

Marsh Posté le 14-11-2008 à 17:35:34    

Bonjour,
 
débutant en python.
 
Avec un navigateur l'url http://www.c64.com/games/download.php?id=1495 me retourne un fichier abc.zip.
 
Je souhaite obtenir ce fichier avec un script python.
 
j'ai réussi en partie avec ce script :
 
import urllib
url = 'http://www.c64.com/games/download.php?id=1495'
urllib.urlretrieve(url,'home/utilisateur/abc.zip')
 
Cependant, je souhaite ne pas préciser le nom du fichier (abc.zip qui est le nom du fichier normalement retourné ).
 
Comment faire ?
 
Merci pour vos réponses à venir.

Reply

Marsh Posté le 14-11-2008 à 17:35:34   

Reply

Marsh Posté le 14-11-2008 à 18:04:31    

oghma a écrit :

Bonjour,

 

débutant en python.

 

Avec un navigateur l'url http://www.c64.com/games/download.php?id=1495 me retourne un fichier abc.zip.

 

Je souhaite obtenir ce fichier avec un script python.

 

j'ai réussi en partie avec ce script :

 

import urllib
url = 'http://www.c64.com/games/download.php?id=1495'
urllib.urlretrieve(url,'home/utilisateur/abc.zip')

 

Cependant, je souhaite ne pas préciser le nom du fichier (abc.zip qui est le nom du fichier normalement retourné ).

 

Comment faire ?

 

Merci pour vos réponses à venir.


C'est pas géré par urlretrieve donc il faut le faire "manuellement":

 
  • Récupères ton fichier sans fournir de nom (il va être stocké dans une location temporaire), mais récupère la sortie de urlretrieve (un tuple (filename, response))
  • Dans la réponse, récupère le header content-disposition
  • Dans ce header, récupère la partie filename
  • Renommes ton fichier en utilisant l'info récupérée


Ca devrait donner un truc genre:

Code :
  1. >>> from urllib import urlretrieve
  2. >>> from re import compile, I
  3. >>> from shutil import move
  4. >>> from os.path import join
  5. >>> p = compile(r"filename=[\"'](?P<file>.+)[\"']$", I)
  6. >>>
  7. >>> tmp, response = urlretrieve('http://www.c64.com/games/download.php?id=1495')
  8. >>> m = p.search(response.getheader('content-disposition', ''))
  9. >>> if m:
  10.     name = m.group('file')
  11. else:
  12.     # quel nom donner si aucun n'est fourni?
  13.     pass
  14.  
  15. >>> move(tmp, join(destination_folder, name))


Message édité par masklinn le 14-11-2008 à 18:05:11

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 14-11-2008 à 20:28:54    

Tout simplement : merci !

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed