当我对一个API调用链接http://example.com/passkey=wedsmdjsjmdd执行curl时
curl 'http://example.com/passkey=wedsmdjsjmdd'
我以csv文件格式获取员工输出数据,如下所示:
"Steve","421","0","421","2","","","","","","","","","421","0","421","2"
如何使用python解析此内容。
我试探着:
import csv
cr = csv.reader(open('http://example.com/passkey=wedsmdjsjmdd',"rb"))
for row in cr:
print row
但它不起作用,我得到了一个错误http://example.com/passkey=wedsmdjsjmdd No such file or directory:
谢谢你!
8条答案
按热度按时间zfycwa2u1#
使用panda,直接从url读取csv文件非常简单。
这将读取表格格式的数据,这将非常容易处理
ukxgm1gy2#
您需要将
open
替换为urllib.urlopen或urllib2.urlopen。例如:
这将输出以下内容
最初的问题被标记为“python-2.x”,但是对于Python 3实现(只需要很小的修改)see below。
jei2mxaa3#
您也可以使用requests模块来完成此操作:
fkaflof64#
要在下载大文件时提高性能,以下方法可能会更有效一些:
通过在GET请求中设置
stream=True
,当我们将r.iter_lines()
传递给csv.reader()时,我们将一个generator传递给csv.reader()。这样,我们就可以使csv.reader()使用for row in reader
在响应中的每一行进行惰性迭代。这避免了在我们开始处理之前将整个文件加载到内存中,从而大大减少了大文件的内存开销。
o7jaxewo5#
这个问题的标签是
python-2.x
,所以修改原来的问题,或者说被接受的答案似乎是不对的。然而,Python 2现在不被支持了,这个问题仍然有很好的google juice“python csv urllib”,所以这里有一个更新的Python 3解决方案。现在需要将
urlopen
的响应(以字节为单位)解码为有效的本地编码,因此accepted answer必须稍微修改一下:请注意以
lines =
开头的额外行,urlopen
现在位于urllib.request
模块中,当然print
需要括号。它几乎没有被宣传,但是是的,
csv.reader
* 可以 * 从一个字符串列表中读取。由于其他人提到了Pandas,这里有一个Pandas再现,它在一个控制台友好的输出中显示CSV:
不过,Pandas并不是一个轻量级的库。如果你不需要Pandas提供的功能,或者启动时间很重要(例如,你正在编写一个命令行实用程序或其他需要快速加载的程序),我建议你坚持使用标准的库函数。
iszxjhcz6#
mnowg1ta7#
对于csv文件,我也使用了这种方法(Python 3.6.9):
os8fio9y8#
你试图用curl命令做的是把文件下载到你的本地硬盘驱动器(HD)。2但是你需要在HD上指定一个路径