2013-12-13 12 views
18

Próbuję otworzyć lokalny plik przy użyciu urllib2. Jak mogę to zrobić? Kiedy próbuję następującą linię z urllib:Otwieranie pliku lokalnego działa z urllib, ale nie z urllib2

resp = urllib.urlopen(url) 

działa poprawnie, ale kiedy przełączyć go na adres:

resp = urllib2.urlopen(url) 

uzyskać:

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

gdzie ten plik zdecydowanie robi zjazd .

Dzięki!

Odpowiedz

27

Wystarczy umieścić "file://" przed ścieżki

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

Działa doskonale, dzięki! –

+1

@JasonBaldwin: Może się zepsuć, jeśli ścieżka zawiera procent znaku. Użyj 'urllib.quote()', aby tego uniknąć: ''file: //' + urllib.quote (abspath (path))' – jfs

+0

To nie działa, jeśli ścieżka jest względna. –

1

W metodzie urllib.urlopen: Jeśli parametr URL nie posiada identyfikator programu, będzie to otwiera plik lokalny. ale urllib2 nie zachowuje się w ten sposób.

Metoda urllib2 nie może przetworzyć tego procesu.

Zawsze dobrze jest dołączyć identyfikator schematu "file: //" zarówno do wywołania metody dla parametru URL.

+0

Dzięki za wyjaśnienie! –

+0

Z drugiej strony 'open' nie rozumie przedrostka' file: // '. –

0

Miałem ten sam problem i faktycznie, właśnie zdałem sobie sprawę, że jeśli pobierzesz źródło strony, a następnie otworzysz ją na chrome, twoja przeglądarka pokaże ci dokładną lokalną ścieżkę na pasku adresu. Powodzenia!

Powiązane problemy