使用pandas通过FTP检索文件

时间:2013-02-18 20:57:37

标签: ftp pandas unzip gunzip

我刚刚掌握了大熊猫(这很棒)我需要做的是将压缩的基因组学类型文件从ftp站点读入pandas数据帧。 这就是我尝试过的并且遇到了大量错误:

from pandas.io.parsers import *

chr1 = 'ftp://ftp.ncbi.nih.gov/snp/organisms/human_9606/chr_rpts/chr_1.txt.gz'

CHR1 = read_csv(chr1, sep='\t', compression = 'gzip', skiprows = 10)

print type(CHR1)
print CHR1.head(10)

理想情况下,我想做这样的事情:

from pandas.io.data import *
AAPL = DataReader('AAPL', 'yahoo', start = '01/01/2006')

1 个答案:

答案 0 :(得分:1)

这个问题的有趣部分是如何从ftp 流式传输一个(gz)文件,讨论here,其中声称以下内容将在Python中运行 3.2 (但won't in 2.x, nor will it be backported),在我的系统上就是这种情况:

import urllib.request as ur
from gzip import GzipFile

req = ur.Request(chr1) #  gz file on ftp (ensure startswith 'ftp://')
z_f = ur.urlopen(req)

# this line *may* work (but I haven't been able to confirm it)
# df = pd.read_csv(z_f, sep='\t', compression='gzip', skiprows=10)

# this works (*)
f = GzipFile(fileobj=z_f, mode="r")
df = pd.read_csv(f, sep='\t', skiprows=10)

(*)这里f是“类文件”,在某种意义上我们可以执行readline(逐行读取),而不必下载/打开整个文件。

注意:我无法将ftplib library发送到readline,目前尚不清楚是否应该这样做。