파이썬에서 텍스트 파일의 URL이 주어 졌을 때 텍스트 파일의 내용에 액세스하고 텍스트 파일의 로컬 사본을 저장하지 않고 파일 내용을 로컬에서 한 줄씩 인쇄하는 가장 간단한 방법은 무엇입니까?
TargetURL=http://www.myhost.com/SomeFile.txt
#read the file
#print first line
#print second line
#etc
답변
09/2016 편집 : Python 3 이상에서는 urllib2 대신 urllib.request 를 사용합니다.
실제로 가장 간단한 방법은 다음과 같습니다.
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이 제안한 것처럼 “readlines”도 필요하지 않습니다. 단축 할 수도 있습니다. *
import urllib2
for line in urllib2.urlopen(target_url):
print line
그러나 파이썬에서는 가독성이 중요하다는 것을 기억하십시오.
그러나 이것은 가장 간단한 방법이지만 안전한 방법은 아닙니다. 대부분의 네트워크 프로그래밍에서 예상되는 데이터의 양이 존중되는지 알 수 없기 때문입니다. 따라서 일반적으로 고정되고 합리적인 양의 데이터를 읽는 것이 좋습니다. 예상 한 데이터에 충분하지만 스크립트가 넘치지 않도록 방지 할 수 있습니다.
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
* 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
답변
저는 Python의 초보자이며 허용되는 솔루션에서 Python 3 에 대한 비공식적 인 의견 이 혼란 스러웠습니다. 후손을 위해 Python 3에서이 작업을 수행하는 코드는 다음과 같습니다.
import urllib.request
data = urllib.request.urlopen(target_url)
for line in data:
...
또는 대안으로
from urllib.request import urlopen
data = urlopen(target_url)
그냥 참고 import urllib
작동하지 않습니다.
답변
실제로 한 줄씩 읽을 필요가 없습니다. 다음과 같이 모든 것을 얻을 수 있습니다.
import urllib
txt = urllib.urlopen(target_url).read()
답변
요청 라이브러리는 간단한 인터페이스를 가지고 있으며 파이썬 2와 3 모두 작동합니다.
import requests
response = requests.get(target_url)
data = response.text
답변
import urllib2
for line in urllib2.urlopen("http://www.myhost.com/SomeFile.txt"):
print line
답변
import urllib2
f = urllib2.urlopen(target_url)
for l in f.readlines():
print l
답변
Python 3의 또 다른 방법은 urllib3 패키지 를 사용하는 것 입니다.
import urllib3
http = urllib3.PoolManager()
response = http.request('GET', target_url)
data = response.data.decode('utf-8')
이것은 urllib3이
- 스레드 안전성.
- 연결 풀링.
- 클라이언트 측 SSL / TLS 확인.
- 멀티 파트 인코딩으로 파일 업로드.
- 요청 재시도 및 HTTP 리디렉션 처리를위한 도우미입니다.
- gzip 및 deflate 인코딩 지원.
- HTTP 및 SOCKS에 대한 프록시 지원.
- 100 % 테스트 범위.