Frage Was ist in Python der einfachste Weg, den Inhalt der Textdatei zu lesen, wenn man einer Textdatei eine URL gibt?


Wenn Sie in Python die URL für eine Textdatei angeben, wie können Sie dann am einfachsten auf die Inhalte der Textdatei zugreifen und den Inhalt der Datei Zeile für Zeile lokal ausgeben, ohne eine lokale Kopie der Textdatei zu speichern?

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

75
2017-09-08 10:56


Ursprung


Antworten:


Eigentlich ist der einfachste Weg:

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

Sie brauchen nicht einmal "readlines", wie Will vorgeschlagen hat. Du könntest es sogar verkürzen

import urllib2

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

Aber vergessen Sie in Python nicht, dass Lesbarkeit wichtig ist.

Dies ist jedoch der einfachste Weg, aber nicht der sichere Weg, denn meistens wissen Sie bei der Netzwerkprogrammierung nicht, ob die zu erwartende Datenmenge eingehalten wird. Sie sollten also in der Regel eine feste und vernünftige Menge an Daten lesen, etwas, von dem Sie wissen, dass es für die erwarteten Daten ausreicht, das Skript jedoch davon abgehalten wird, überflutet zu werden:

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 und höher verwenden urllib.request anstelle von urllib2


84
2017-09-08 11:04



Es ist wirklich nicht notwendig, Zeile für Zeile zu lesen. Du kannst die ganze Sache so bekommen:

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

22
2017-09-08 20:55



Ich bin ein Neuling für Python und den Kommentar dazu Python 3 in der akzeptierten Lösung war verwirrend. Für die Nachwelt ist der Code, um dies in Python 3 zu tun

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

for line in data:
    ...

oder alternativ

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

Beachte das gerade import urllib funktioniert nicht.


12
2017-09-08 21:33



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

10
2017-09-08 11:02



import urllib2

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

6
2017-09-08 10:59



Das fordert Bibliothek an hat eine einfachere Schnittstelle und arbeitet mit Python 2 und 3.

import requests

response = requests.get(target_url)
data = response.text

4
2018-06-19 16:39



Ein anderer Weg in Python 3 ist die Verwendung der urllib3 Paket.

import urllib3

http = urllib3.PoolManager()
response = http.request('GET', target_url)
data = response.data.decode('utf-8')

Dies kann eine bessere Option als urllib sein, da urllib3 rühmt sich zu haben

  • Fadensicherheit.
  • Verbindungspooling
  • Clientseitige SSL / TLS-Verifizierung
  • Dateiuploads mit mehrteiliger Codierung
  • Helfer für das Wiederholen von Anfragen und den Umgang mit HTTP-Redirects.
  • Unterstützung für gzip und Deflate-Codierung.
  • Proxy-Unterstützung für HTTP und SOCKS.
  • 100% Testabdeckung.

0
2018-06-19 16:27