Diberikan URL ke file teks, apa cara termudah untuk membaca konten file teks?

113

Dengan Python, ketika diberi URL untuk file teks, apa cara termudah untuk mengakses konten dari file teks dan mencetak konten file secara lokal baris demi baris tanpa menyimpan salinan lokal dari file teks?

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

Jawaban:

114

Sunting 09/2016: Dalam Python 3 dan yang lebih baru, gunakan urllib.request alih-alih urllib2

Sebenarnya cara yang paling sederhana adalah:

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

Anda bahkan tidak perlu "readlines", seperti yang disarankan Will. Anda bahkan dapat mempersingkatnya menjadi: *

import urllib2

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

Tapi ingat dengan Python, keterbacaan itu penting.

Namun, ini adalah cara yang paling sederhana tetapi bukan cara yang aman karena sebagian besar waktu dengan pemrograman jaringan, Anda tidak tahu apakah jumlah data yang diharapkan akan diterima. Jadi, Anda biasanya lebih baik membaca jumlah data yang tetap dan wajar, sesuatu yang Anda tahu cukup untuk data yang Anda harapkan tetapi akan mencegah skrip Anda dibanjiri:

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

* Contoh kedua di Python 3:

import urllib.request  # the lib that handles the url stuff

for line in urllib.request.urlopen(target_url):
    print(line.decode('utf-8')) #utf-8 or iso8859-1 or whatever the page encoding scheme is
e-satis
sumber
38

Saya seorang pemula di Python dan komentar langsung tentang Python 3 dalam solusi yang diterima membingungkan. Untuk anak cucu, kode untuk melakukan ini dengan Python 3 adalah

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

for line in data:
    ...

atau sebagai alternatif

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

Perhatikan bahwa import urllibtidak berhasil.

Andrew Mao
sumber
24

Tidak perlu membaca baris demi baris. Anda bisa mendapatkan semuanya seperti ini:

import urllib
txt = urllib.urlopen(target_url).read()
Ken Kinder
sumber
2
Tidak berfungsi: AttributeError: modul 'urllib' tidak memiliki atribut 'urlopen'
Iratzar Carrasson Bores
1
Jawaban ini hanya berfungsi di Python 2. EDIT: lihat jawaban Andrew Mao untuk Python 3.
leafmeal
Untuk Python 3 itu akan menjadi: txt = urllib.request.urlopen (target_url) .read ()
pembatas
22

The permintaan perpustakaan memiliki antarmuka sederhana dan bekerja dengan baik Python 2 dan 3.

import requests

response = requests.get(target_url)
data = response.text
daunmeal
sumber
10
import urllib2
for line in urllib2.urlopen("http://www.myhost.com/SomeFile.txt"):
    print line
Fabian
sumber
6
import urllib2

f = urllib2.urlopen(target_url)
for l in f.readlines():
    print l
Akan
sumber
2
+1, tapi harap dicatat bahwa ini cara yang paling sederhana, BUKAN YANG AMAN. Jika ada kesalahan yang terjadi di sisi server dan pengiriman konten yang satu ini untuk selamanya, Anda bisa berakhir dengan loop tak terbatas.
e-satis
5

Cara lain di Python 3 adalah dengan menggunakan paket urllib3 .

import urllib3

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

Ini bisa menjadi pilihan yang lebih baik daripada urllib karena urllib3 membanggakan

  • Keamanan benang.
  • Penggabungan koneksi.
  • Verifikasi SSL / TLS sisi klien.
  • File diunggah dengan pengkodean multi bagian.
  • Pembantu untuk mencoba kembali permintaan dan menangani pengalihan HTTP.
  • Dukungan untuk encoding gzip dan deflate.
  • Dukungan proxy untuk HTTP dan SOCKS.
  • Cakupan tes 100%.
daunmeal
sumber
2
The permintaan perpustakaan sebagian didasarkan pada urllib3.
floydn
Sebenarnya ini adalah satu-satunya jawaban di atas yang akan menginstal (urllibx) untuk versi terbaru Python hingga saat ini.
AbstractAlgebraLearner
3

Bagi saya, tidak ada tanggapan di atas yang bekerja langsung ke depan. Sebagai gantinya, saya harus melakukan hal berikut (Python 3):

from urllib.request import urlopen

data = urlopen("[your url goes here]").read().decode('utf-8')

# Do what you need to do with the data.
bmiselis
sumber
0

Hanya memperbarui solusi di sini yang disarankan oleh @ ken-kinder agar Python 2 berfungsi untuk Python 3:

import urllib
urllib.request.urlopen(target_url).read()
pembatas
sumber