提供文本文件的URL,最简单的读取文件内容的方法是什么?
在Python中,当你有一个文本文件的URL时,最简单的方法是什么,可以直接访问这个文本文件的内容,并逐行打印出来,而不需要在本地保存一份副本?
TargetURL=http://www.myhost.com/SomeFile.txt
#read the file
#print first line
#print second line
#etc
14 个回答
60
requests库的使用方式更简单,而且可以在Python 2和Python 3中都能使用。
import requests
response = requests.get(target_url)
data = response.text
69
我刚开始学习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
是不行的。
158
编辑于2016年9月:在Python 3及以上版本中,使用 urllib.request 替代urllib2
其实最简单的方法是:
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
你甚至不需要使用“readlines”,正如Will所建议的。你可以把它简化为: *
import urllib2
for line in urllib2.urlopen(target_url):
print line
但要记住,在Python中,代码的可读性很重要。
不过,这虽然是最简单的方法,但并不是最安全的方法,因为在网络编程中,你通常不知道会收到多少数据。所以一般来说,最好是读取一个固定且合理的数据量,这个量应该是你预期的数据量的足够值,这样可以防止你的脚本被大量数据淹没:
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