从位于远程的超链接读取信息(知道通过超链接它将是 csv 文件,但找不到通用方法)[关闭]
Posted
技术标签:
【中文标题】从位于远程的超链接读取信息(知道通过超链接它将是 csv 文件,但找不到通用方法)[关闭]【英文标题】:Read info from hyperlink located remotely (know that by hyperlink it will be csv file, but can't find general approach) [closed] 【发布时间】:2016-05-28 20:06:22 【问题描述】:我正在使用 Python 3.4。我已经尝试在网上找到解决方案,但仍然没有。
我有一个指向 csv 文件(数据集)的链接。
有没有办法从这个链接获取信息而不在本地目录中复制它?(例如,我没有足够的磁盘空间)
我想继续处理将在 RAM 中的数据。(例如,我计划找出有多少数据行并且必须进行一些数据挖掘和过滤工作,目前并不重要)
【问题讨论】:
向文件的 URL 发出 HTTP GET 请求,然后计算行数......看起来很简单。你在哪里卡住了,你试过什么? @cricket_007 我试过这个solution 但它只适用于本地csv文件 好的,可以,但是您需要通过打开 URL 而不是文件来获取文件内容。使用答案中提到的请求库是一种快速的方法 @rolf_of_saxony 提供了一个有效的解决方案。如此令人发指的拒绝投票和搁置问题的原因是什么?如果他们每个人都被否决了,我应该如何提问?如果投反对票的人可以更具体地解释他投反对票的原因,那也会更公平。根据help center我可以申请重开问题,请以这种方式继续或说明缺少的内容。 我没有投反对票,但我只能猜测您没有包含您尝试过的内容或研究如何从网站获取文件内容。如果您不想被否决,请参阅此处。 ***.com/help/how-to-ask。另外,答案已被接受,因此没有理由重新打开。 【参考方案1】:尝试以下方法:
import requests
r = requests.get('http://127.0.0.1/some_path/small.csv')
print len(r.content.split('\n')) -1
结果: 10
对于small.csv文件如下:
1lpcfgokakmgnkcojhhkbfbldkacnbeo,6B5108
pjkljhe2ncpnkpknbcohdijeoejaedia,678425
apdfllc5aahabafndbhieahigkjlhalf,651374
aohghmighlieiainnegkcijnfilokake,591116
coobgpohoikkiipiblmjeljniedjpjpf,587200
dmgjnkhnkblpmfjpdakehnaikgdjllic,540979
felcaaldnbdncclmgdcncolpebgiejap,480535
aapocclcgogkmnckokdopfmhonfmgoek,480441
pdehmppfilefbolgganhfihpbmjlgebh,273609
nafaimnnclfjfedmmabolbppcngeolgf,105979
编辑:(根据 MHawke 的建议)
import requests
line_cnt=0
r = requests.get('http://127.0.0.1/some_path/small.csv',stream=True)
for i in r.iter_lines():
if i.strip():
line_cnt +=1
print (line_cnt)
这个版本不计算空行,对于大文件应该更有效,因为它使用iter_lines
iter_lines(chunk_size=512, decode_unicode=None, delimiter=None)
迭代响应数据,一次一行。什么时候 stream=True 在请求上设置,这避免了读取内容 一次进入内存以获得大量响应。
(注意:不可重入安全)
【讨论】:
尝试了安装 requests 包的解决方案,它给了我一个语法错误。刚刚用 'print (len(r.content.split()))' 修复它 那你用的是Python3! 相应地更新了标签。您的解决方案效果很好!顺便说一句,我不知道是谁一直在否决我的每一个问题。 这个答案被否决了,因为只要数据中有空格,split()
的使用就会失败。
@RolfofSaxony:也许更好的方法是使用r.iter_lines()
。如果结合设置stream=True
,在发出请求时内存使用率非常低。无论如何,我已经删除了反对票。您可能还应该过滤掉任何空行。以上是关于从位于远程的超链接读取信息(知道通过超链接它将是 csv 文件,但找不到通用方法)[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
LibreOffice writer:创建一个打开 ssh 的超链接