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

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

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.


24

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

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

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


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

6
import urllib2

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

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%.

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.

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()
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.