Soru Python'da, bir metin dosyasına bir URL verildiğinde, metin dosyasının içeriğini okumak için en kolay yol hangisidir?


Python'da, bir metin dosyasının URL'sini verdiğinizde, metin dosyasından içeriğe erişmenin ve dosya içeriğinin metin satırının yerel bir kopyasını kaydetmeden yerel olarak satır-içi olarak yazdırmanın en basit yolu nedir?

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

76
2017-09-08 10:56


Menşei




Cevaplar:


Aslında en basit yol:

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

Will'in önerdiği gibi, "okuma dizilerine" bile ihtiyacınız yok. Hatta kısaltabilirsin

import urllib2

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

Ama Python'da hatırla, okunabilirlik önemlidir.

Ancak, bu en basit yoldur, ancak güvenli yoldan değil, çünkü çoğu zaman ağ programlaması ile beklediğiniz veri miktarına uyulacağını bilmezsiniz. Bu nedenle, genellikle beklediğiniz veriler için yeterli olduğunu bildiğiniz ancak komut dosyanızın su basmasını engelleyeceğiniz, sabit ve makul miktarda veriyi daha iyi okursunuz:

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

09/2016 Düzenle: python 3 ve üstü kullanımda urllib.request urllib2 yerine


87
2017-09-08 11:04





Hat-on-line okumaya gerçekten gerek yok. Her şeyi böyle elde edebilirsiniz:

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

22
2017-09-08 20:55



Çalışmıyor: AttributeError: 'urllib' modülünün 'urlopen' özelliği yoktur. - Iratzar Carrasson Bores
Bu cevap sadece Python 2'de çalışır. DÜZENLEME: bkz. Andrew Mao'nun cevabı Python 3 için. - leafmeal


Python’a yeni bir yorum yazdım. Python 3 kabul edilen çözümde kafa karıştırıcıydı. Gelecek kuşak için, bunu Python 3'te yapmanın kodu

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

for line in data:
    ...

Veya alternatif olarak

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

Sadece unutmayın import urllib çalışmıyor.


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



+1, ama unutmayın ki en basit yol, SAFEST DEĞİL. Sunucu tarafında ve bu teslimat içeriği için herhangi bir hata oluşursa, sonsuz bir döngü ile bitebilirsiniz. - e-satis


istek kitaplığı daha basit bir arayüze sahiptir ve hem Python 2 ve 3 ile çalışır.

import requests

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

4
2018-06-19 16:39





Python 3'te başka bir yol kullanmaktır. urllib3 paketi.

import urllib3

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

Bu urllib3 sahip olduğu için urllib'den daha iyi bir seçenek olabilir

  • İplik güvenliği.
  • Bağlantı havuzu.
  • Müşteri tarafı SSL / TLS doğrulaması.
  • Çok kanallı kodlama ile dosya yükleme.
  • İstekleri yeniden denemek ve HTTP yönlendirmeleriyle uğraşmak için yardımcılar.
  • Gzip ve deflate kodlama desteği.
  • HTTP ve SOCKS için proxy desteği.
  • % 100 test kapsamı.

0
2018-06-19 16:27