提供文本文件的URL,最简单的读取文件内容的方法是什么?

180 投票
14 回答
330189 浏览
提问于 2025-04-15 14:09

在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

撰写回答