从URL读取数据

krh*_*hlk 13 julia

是否有一种从一些网址获取数据的相当简单的方法?我试过最明显的版本,不起作用:

readcsv("https://dl.dropboxusercontent.com/u/.../testdata.csv")
Run Code Online (Sandbox Code Playgroud)

我没有找到任何可用的参考.有帮助吗?

ric*_*2hs 19

如果要从URL读取CSV,可以使用Requests包作为@waTeim 显示,然后通过IOBuffer读取数据.见下面的例子.

或者,正如@Colin T Bowers评论的那样,您可以使用当前(2017年12月)更积极维护的HTTP.jl包,如下所示:

julia> using HTTP

julia> res = HTTP.get("https://www.ferc.gov/docs-filing/eqr/q2-2013/soft-tools/sample-csv/transaction.txt");

julia> mycsv = readcsv(res.body);

julia> for (colnum, myheader) in enumerate(mycsv[1,:])
           println(colnum, '\t', myheader)
       end
1   transaction_unique_identifier
2   seller_company_name
3   customer_company_name
4   customer_duns_number
5   tariff_reference
6   contract_service_agreement
7   trans_id
8   transaction_begin_date
9   transaction_end_date
10  time_zone
11  point_of_delivery_control_area
12  specific location
13  class_name
14  term_name
15  increment_name
16  increment_peaking_name
17  product_name
18  transaction_quantity
19  price
20  units
21  total_transmission_charge
22  transaction_charge
Run Code Online (Sandbox Code Playgroud)

使用Requests.jl包:

julia> using Requests

julia> res = get("https://www.ferc.gov/docs-filing/eqr/q2-2013/soft-tools/sample-csv/transaction.txt");

julia> mycsv = readcsv(IOBuffer(res.data));

julia> for (colnum, myheader) in enumerate(mycsv[1,:])
         println(colnum, '\t', myheader)
       end
1   transaction_unique_identifier
2   seller_company_name
3   customer_company_name
4   customer_duns_number
5   tariff_reference
6   contract_service_agreement
7   trans_id
8   transaction_begin_date
9   transaction_end_date
10  time_zone
11  point_of_delivery_control_area
12  specific location
13  class_name
14  term_name
15  increment_name
16  increment_peaking_name
17  product_name
18  transaction_quantity
19  price
20  units
21  total_transmission_charge
22  transaction_charge
Run Code Online (Sandbox Code Playgroud)


mik*_*old 11

如果您想读入数据帧,这也适用于 Julia:

using CSV   

dataset = CSV.read(download("https://mywebsite.edu/ml/machine-learning-databases/my.data"))
Run Code Online (Sandbox Code Playgroud)


waT*_*eim 9

请求包似乎运作得很好.还有其他(请参阅整个包列表),但主动维护请求.

获得它

julia> Pkg.add("Requests")

julia> using Requests
Run Code Online (Sandbox Code Playgroud)

使用它

您可以使用与各种HTTP动词get,post等对应的导出函数之一,它返回Response类型

julia> res = get("http://julialang.org")
Response(200 OK, 21 Headers, 20913 Bytes in Body)

julia> typeof(res)
Response (constructor with 8 methods)
Run Code Online (Sandbox Code Playgroud)

然后,例如,您可以使用@printf打印数据

julia> @printf("%s",res.data);
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-us" lang="en-us">
<head>
  <meta http-equiv="content-type" content="text/html; charset=utf-8" />
...
Run Code Online (Sandbox Code Playgroud)