Câu hỏi Trong Python, cho một URL vào một tệp văn bản, cách đơn giản nhất để đọc nội dung của tệp văn bản là gì?


Trong Python, khi đưa URL cho một tệp văn bản, cách đơn giản nhất để truy cập nội dung khỏi tệp văn bản và in nội dung của tệp ra cục bộ theo từng dòng mà không lưu bản sao cục bộ của tệp văn bản là gì?

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

76
2017-09-08 10:56


gốc




Các câu trả lời:


Trên thực tế, cách đơn giản nhất là:

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

Bạn thậm chí không cần "readlines", như Will đề nghị. Bạn thậm chí có thể rút ngắn nó

import urllib2

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

Nhưng hãy nhớ trong Python, vấn đề dễ đọc.

Tuy nhiên, đây là cách đơn giản nhất nhưng không phải là cách an toàn vì phần lớn thời gian với lập trình mạng, bạn không biết liệu lượng dữ liệu mong đợi sẽ được tôn trọng hay không. Vì vậy, bạn thường đọc tốt hơn số lượng dữ liệu cố định và hợp lý, điều bạn biết là đủ cho dữ liệu bạn mong đợi nhưng sẽ ngăn chặn tập lệnh của bạn bị tràn ngập:

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

Chỉnh sửa 09/2016: Trong python 3 trở lên sử dụng urllib.request thay vì urllib2


87
2017-09-08 11:04





Có thực sự không cần phải đọc từng dòng một. Bạn có thể nhận được toàn bộ điều như thế này:

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

22
2017-09-08 20:55



Nó không hoạt động: AttributeError: module 'urllib' không có thuộc tính 'urlopen' - Iratzar Carrasson Bores
Câu trả lời này chỉ hoạt động trong Python 2. EDIT: xem Câu trả lời của Andrew Mao cho Python 3. - leafmeal


Tôi là người mới sử dụng Python và nhận xét không chính xác về Python 3 trong giải pháp được chấp nhận là khó hiểu. Đối với hậu thế, mã để làm điều này trong Python 3 là

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

for line in data:
    ...

Hay cách khác

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

Lưu ý rằng chỉ import urllib không hoạt động.


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, nhưng xin lưu ý rằng đó là cách đơn giản nhất, KHÔNG PHẢI LÀ TỐT NHẤT. Nếu bất kỳ lỗi nào xảy ra ở phía máy chủ và nội dung phân phối này bao giờ hết, bạn có thể kết thúc bằng một vòng lặp vô hạn. - e-satis


Các thư viện yêu cầu có giao diện đơn giản hơn và hoạt động với cả Python 2 và 3.

import requests

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

4
2018-06-19 16:39





Một cách khác trong Python 3 là sử dụng gói urllib3.

import urllib3

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

Điều này có thể là một lựa chọn tốt hơn so với urllib kể từ khi urllib3 tự hào có

  • An toàn chủ đề.
  • Kết nối tổng hợp.
  • Xác minh SSL / TLS phía máy khách.
  • Tải lên tệp bằng mã hóa nhiều phần.
  • Người trợ giúp để thử lại các yêu cầu và xử lý các chuyển hướng HTTP.
  • Hỗ trợ cho gzip và deflate mã hóa.
  • Hỗ trợ proxy cho HTTP và SOCKS.
  • Phạm vi kiểm tra 100%.

0
2018-06-19 16:27