2013-12-13 6 views
18

Sto provando ad aprire un file locale usando urllib2. Come posso fare questo? Quando provo la seguente linea con urllib:L'apertura del file locale funziona con urllib ma non con urllib2

resp = urllib.urlopen(url) 

funziona correttamente, ma quando lo accendo a:

resp = urllib2.urlopen(url) 

ottengo:

ValueError: unknown url type: /path/to/file 

in cui tale file non definitivamente uscita .

Grazie!

risposta

27

Basta mettere "file://" davanti al percorso

>>> import urllib2 
>>> urllib2.urlopen("file:///etc/debian_version").read() 
'wheezy/sid\n' 
+0

Funziona perfettamente, grazie! –

+1

@JasonBaldwin: potrebbe interrompersi se il percorso contiene caratteri percentuali. Usa 'urllib.quote()' per evitarlo: ''file: //' + urllib.quote (abspath (path))' – jfs

+0

Che non funziona se il percorso è relativo. –

1

Nel metodo urllib.urlopen: se il parametro URL non ha un identificatore di schema, lo farà apre un file locale. ma l'urllib2 non si comporta in questo modo.

Quindi, il metodo urllib2 non può elaborarlo.

È sempre consigliabile includere l'identificatore dello schema 'file: //' in entrambi i richiamo del metodo per il parametro url.

+0

Grazie per la spiegazione! –

+0

D'altra parte, 'open' non capirà' file: // 'prefisso. –

0

Ho avuto lo stesso problema e, in realtà, mi sono appena reso conto che se si scarica la sorgente della pagina e la si apre su Chrome, il browser mostrerà il percorso locale esatto nella barra degli indirizzi. In bocca al lupo!

Problemi correlati