2016-09-20 5 views
0

Я использую requests.get для загрузки файла csv. Мне нужен только два столбца из этого файла csv, а остальная часть столбца бесполезна для меня. В настоящее время я используюзагрузить определенные столбцы csv using requests.get

r = requests.get(finalurl, verify=False,stream=True) 
shutil.copyfileobj(r.raw, csvfile) 

для получения полного файла csv.

Однако, я хочу загрузить только два столбца из файла csv. Я всегда могу загрузить весь контент, а затем взять то, что необходимо.

Просто проверить, есть ли способ, чтобы получить конкретный столбец, используя requests.get Eg: http://chart.finance.yahoo.com/table.csv?s=AAPL&a=7&b=20&c=2016&d=8&e=20&f=2016&g=d&ignore=.csv

мне нужно только date и Adj.close из этого CSV-файла.

Не могли бы найти похожие вопросы, пожалуйста, направить меня, если аналогичный вопрос был задан ранее.

Благодаря

+0

можете ли вы добавить код, который у вас есть? – EoinS

+0

Вы не можете. Это в основном эквивалентно: «Я хочу только загрузить зеленые части изображений». Это просто не имеет смысла. Вам необходимо загрузить весь файл, а затем обработать его. – davidism

ответ

-1

Не используется requests.get раньше, но я был бы удивлен, если вы можете запросить конкретные столбцы внутри файла с удаленного сервера.

Взгляните на этот пост Read specific columns with pandas or other python module

Это обеспечивает решение для открытия определенных столбцов, но в целом нужно будет загружать первый.

1

Вы можете использовать Numpy и LoadText:

import numpy as np 
b=np.loadtxt(r'name.csv',dtype=str,delimiter=',',skiprows=1,usecols=(0,1,2)) 

Это создает массив с данными для всего столбцов вы выбираете.

2

Попробуйте pandas, в вашей ситуации, pandas более удобно.

In [2]: import pandas.io.data as web 
    ...: aapl = web.DataReader("AAPL", 'yahoo','2016-7-20','2016-8-20') 
    ...: aapl['Adj Close'] 
    ...: 
    ...: 
Out[2]: 
Date 
2016-07-20  99.421412 
2016-07-21  98.894269 
2016-07-22  98.128421 
2016-07-25  96.815526 
2016-07-26  96.149138 
2016-07-27 102.395300 
2016-07-28 103.777810 
2016-07-29 103.648513 
2016-08-01 105.478603 
2016-08-02 103.917063 
2016-08-03 105.220002 
2016-08-04 105.870003 
2016-08-05 107.480003 
2016-08-08 108.370003 
2016-08-09 108.809998 
2016-08-10 108.000000 
2016-08-11 107.930000 
2016-08-12 108.180000 
2016-08-15 109.480003 
2016-08-16 109.379997 
2016-08-17 109.220001 
2016-08-18 109.080002 
2016-08-19 109.360001 
Name: Adj Close, dtype: float64 
-1

Вы не можете скачивать определенные столбцы, вы можете использовать обычное финансирование api. Вам не нужно загружать все данные за один раз либо хотя и заменить после того, вы можете разобрать, как вы идете:

import csv 

final_url = "http://chart.finance.yahoo.com/table.csv?s=AAPL&a=7&b=20&c=2016&d=8&e=20&f=2016&g=d&ignore=.csv" 
with open("out.csv", "w") as out: 
    writer = csv.writer(out) 
    data = requests.get(final_url, verify=False, stream=True).iter_lines() 
    headers = fieldnames = next(data).split(",") 
    reader = csv.DictReader(data, fieldnames=headers) 
    writer.writerow(["Date", "Adj Close"]) 
    for row in reader: 
     writer.writerow([row["Date"], row["Adj Close"]]) 

Вы могли бы просто индекс, если порядок следования столбцов гарантированно не изменится, но с использованием DictReader позволяет получить доступ по ключевому слову, поэтому заказ не имеет значения. Я думаю, что также можно предположить, что в данных не будет никаких новых строк.

Смежные вопросы