在Python中,当给出文本文件的URL时,从文本文件中访问内容的最简单方法是什么,并逐行本地打印文件内容而不保存文本的本地副本文件?
TargetURL=http://www.myhost.com/SomeFile.txt
#read the file
#print first line
#print second line
#etc
答案 0 :(得分:94)
实际上最简单的方法是:
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”,正如威尔建议的那样。你甚至可以将它缩短为
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
编辑09/2016:在python 3及更高版本中使用urllib.request而不是urllib2
答案 1 :(得分:23)
实际上没有必要逐行阅读。你可以得到这样的全部内容:
import urllib
txt = urllib.urlopen(target_url).read()
答案 2 :(得分:19)
我是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
不起作用。
答案 3 :(得分:10)
import urllib2
for line in urllib2.urlopen("http://www.myhost.com/SomeFile.txt"):
print line
答案 4 :(得分:9)
requests library的界面更简单,可与Python 2和3一起使用。
import requests
response = requests.get(target_url)
data = response.text
答案 5 :(得分:6)
import urllib2
f = urllib2.urlopen(target_url)
for l in f.readlines():
print l
答案 6 :(得分:3)
对我来说,上述任何回应都无法直接解决。相反,我必须执行以下操作(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.
答案 7 :(得分:3)
我确实认为 WITH BinaryVal AS(
SELECT STRING_AGG(CASE V.I & POWER(2,P.I) WHEN 0 THEN 0 ELSE 1 END,'') WITHIN GROUP (ORDER BY P.I DESC) AS BinaryNum
FROM (VALUES(SUBSTRING('5921000000b1212800b1219a',2,3)))SS(Hex)
CROSS APPLY (VALUES(CONVERT(int,CONVERT(varbinary(2),'0x0'+SS.Hex,1))))V(I)
CROSS APPLY (VALUES(0),(1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11))P(I))
SELECT (SUM(CASE SUBSTRING(B1,P.I,1) WHEN 1 THEN POWER(2,P.P) END) * 2) - 128,
(SUM(CASE SUBSTRING(B2,P.I,1) WHEN 1 THEN POWER(2,P.P) END) * 2) - 128
FROM BinaryVal BV
CROSS APPLY(VALUES(SUBSTRING(BV.BinaryNum,1,6),SUBSTRING(BV.BinaryNum,7,6)))B(B1, B2)
CROSS APPLY(VALUES(6,0),(5,1),(4,2),(3,3),(2,4),(1,5))P(I,P);
是最好的选择。另请注意手动设置编码的可能性。
requests
答案 8 :(得分:1)
Python 3中的另一种方法是使用http://flask.pocoo.org/docs/1.0/quickstart/#the-request-object。
import urllib3
http = urllib3.PoolManager()
response = http.request('GET', target_url)
data = response.data.decode('utf-8')
与urllib相比,这可能是一个更好的选择,因为urllib3拥有拥有
的功能
- 线程安全。
- 连接池。
- 客户端SSL / TLS验证。
- 使用分段编码上传文件。
- 用于重试请求和处理HTTP重定向的助手。
- 支持gzip和deflate编码。
- 对HTTP和SOCKS的代理支持。
- 100%的测试覆盖率。
答案 9 :(得分:0)
只需在此处更新@ ken-kinder建议的Python 2解决方案即可在Python 3中使用
import urllib
urllib.request.urlopen(target_url).read()
答案 10 :(得分:0)
请求包对于简单的用户界面非常有效 正如@Andrew Mao所建议的
import requests
response = requests.get('http://lib.stat.cmu.edu/datasets/boston')
data = response.text
for i, line in enumerate(data.split('\n')):
print(f'{i} {line}')
o / p:
0 The Boston house-price data of Harrison, D. and Rubinfeld, D.L. 'Hedonic
1 prices and the demand for clean air', J. Environ. Economics & Management,
2 vol.5, 81-102, 1978. Used in Belsley, Kuh & Welsch, 'Regression diagnostics
3 ...', Wiley, 1980. N.B. Various transformations are used in the table on
4 pages 244-261 of the latter.
5
6 Variables in order:
在how to extract dataset/dataframe from URL上结帐kaggle笔记本