2009-09-08 9 views
68

W języku Python, gdy podano adres URL pliku tekstowego, jaki jest najprostszy sposób dostępu do zawartości poza plikiem tekstowym i wydrukowania zawartości pliku lokalnie wiersz po wierszu bez zapisywania lokalnej kopii pliku tekstowego ?W Pythonie, podając adres URL do pliku tekstowego, jaki jest najprostszy sposób na odczytanie zawartości pliku tekstowego?

TargetURL=http://www.myhost.com/SomeFile.txt 
#read the file 
#print first line 
#print second line 
#etc 

Odpowiedz

80

Właściwie Najprostszym sposobem jest:

import urllib2 # the lib that handles the url stuff 

data = urllib2.urlopen(target_url) # it's a file like object and works just like a file 
for line in data: # files are iterable 
    print line 

Nie trzeba nawet "readlines", jak to sugeruje. Możesz nawet skrócić go do

import urllib2 

for line in urllib2.urlopen(target_url): 
    print line 

Ale pamiętaj, że w Pythonie liczy się czytelność.

Jest to jednak najprostszy, ale nie bezpieczny sposób, ponieważ przez większość czasu przy programowaniu sieciowym nie wiesz, czy ilość danych, których można oczekiwać, będzie przestrzegana. Więc chcesz generalnie lepiej czytać stałą i wystarczającą ilość danych, coś wiesz na tyle do danych można oczekiwać, ale uniemożliwi skrypt z zostały zalane:

import urllib2 

data = urllib2.urlopen("http://www.google.com").read(20000) # read only 20 000 chars 
data = data.split("\n") # then split it into lines 

for line in data: 
    print line 

Edit 09/2016: In python 3 and up use urllib.request instead of urllib2

6
import urllib2 

f = urllib2.urlopen(target_url) 
for l in f.readlines(): 
    print l 
+2

+1, ale należy pamiętać, że jest to najprostszy sposób, a NIE SAFEST. Jeśli jakikolwiek błąd wystąpi po stronie serwera i ta jedna treść dostarczania na zawsze, możesz skończyć z nieskończoną pętlą. –

10
import urllib2 
for line in urllib2.urlopen("http://www.myhost.com/SomeFile.txt"): 
    print line 
22

Tam naprawdę nie ma potrzeby czytać wiersz po wierszu. Można dostać całą sprawę tak:

import urllib 
txt = urllib.urlopen(target_url).read() 
+0

Nie działa: _AtrybutError: moduł 'urllib' nie ma atrybutu "urlopen'_ –

3

Jestem początkujących do Python i bezceremonialny komentarz o Python 3 w przyjętego rozwiązania było mylące. Dla potomności, kod to zrobić w Pythonie 3 jest

import urllib.request 
data = urllib.request.urlopen(target_url) 

for line in data: 
    ... 

lub alternatywnie

from urllib.request import urlopen 
data = urlopen(target_url) 

Należy pamiętać, że tylko import urllib nie działa.

Powiązane problemy