2017-08-16 5 views
1

pandas.read_csv機能は非常に柔軟で、最近herePythonでPandasのソースコードは、pd.read_csvによって処理されるURLですか?

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

を説明するように、私はこのケースが処理され、ソースコード内で検索しようとしていますURLの入力をサポートし始めています。

1)read_csvio/parsers.py

2)他の場所で定義された関数_read(filepath_or_buffer, kwds)_make_parser_function代表者データの読み出しによって生成関数内_make_parser_functionによって生成された、かなり一般的なラッパーである:ここで私はこれまで知っているものですin io/parsers.py

3)この関数_read(filepath_or_buffer, kwds)TextFileReaderを作成し、結果はTextFileReader.read()です。しかし、TextFileReaderは、テキストファイルだけに責任があるようです。これは、様々なタイプの圧縮を扱うための機能を提供しますが、URL入力をチェックすることは何もありません。

4)一方、io/html.pyには、明らかにURLにアクセスしてhttpクエリの結果を返す関数_read(obj)が含まれています。

この問題の簡単な解決策は、入力文字列がURLであるかどうかを確認することです。その場合はhtmlモジュールにディスパッチしてください。しかし、私はread_csvをたどるとどこにこのようなことが起こるのか分かりません。誰かが正しい方向に私を指すことができますか?

答えて

1

は、URLは、このような読みとして認識されている2と3

2.5)_readcalls 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 
    """ 
    ... 
+0

非常に良いキャッチ! – MaxU

+0

おかげで - 該当する行は文字通りあなたはドキュメンテーション文字列の後に指摘した関数内のコードの2行目で '_is_url(filepath_or_buffer)の場合:' –

関連する問題