在哪里Python Pandas的源代码是由pd.read_csv处理的URL?

时间:2017-08-16 18:13:57

标签: python pandas http url

pandas.read_csv功能非常灵活,最近开始支持网址输入here

df = pd.read_csv('http://www.somefile.csv')

我试图在源代码中找到处理此案例的地方。这是我目前所知道的:

1)read_csv是由_make_parser_function io/parsers.py _make_parser_function生成的相当通用的包装器

2)_read(filepath_or_buffer, kwds)生成的函数将数据读取委托给io/parsers.py

中其他位置定义的函数_read(filepath_or_buffer, kwds)

3)此函数TextFileReader创建TextFileReader.read()并返回TextFileReader的结果。但是,io/html.py似乎只负责文本文件。它提供了处理各种类型压缩的功能,但我没有看到任何检查URL输入。

4)另一方面,_read(obj)包含一个函数html,它显然是访问URL并返回http查询的结果。

在我看来,解决这个问题的简单方法是检查输入字符串是否为URL,如果是,则调度到read_csv模块;但是,在追踪UIButton时,我无法找到这种情况。有人能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:1)

你错过了2到3之间的一步。

2.5)_read calls get_filepath_or_buffer()其中,网址被识别并读取。

filepath_or_buffer, _, compression = get_filepath_or_buffer(
    filepath_or_buffer, encoding, compression)

get_filepath_or_buffer() is defined in pandas.io.common

def get_filepath_or_buffer(filepath_or_buffer, encoding=None,
                           compression=None):
    """
    If the filepath_or_buffer is a url, translate and return the buffer.
    Otherwise passthrough.
    Parameters
    ----------
    filepath_or_buffer : a url, filepath (str, py.path.local or pathlib.Path),
                         or buffer
    encoding : the encoding to use to decode py3 bytes, default is 'utf-8'
    Returns
    -------
    a filepath_or_buffer, the encoding, the compression
    """
    ...