使用requests.g下载csv的特定列

2024-06-30 15:37:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用requests.get下载csv文件。我只需要这个csv文件的两个列,其余的列对我没有用。目前我正在使用

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

获取完整的csv文件。在

但是,我只想从csv文件下载两列。我总是可以下载整个内容,然后采取必要的。在

只是检查是否有方法使用requests.get获取特定列 例如: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

{cd3>只需要这个文件。在

找不到类似的问题,如果之前问过类似的问题,请告诉我。在

谢谢


Tags: 文件csvcsvfile方法falsetrue内容stream
3条回答

您不能只下载某些列,可以使用常规的finance 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让您可以按键访问,所以顺序是不相关的。我认为假设数据中不会嵌套任何新行也是安全的。在

您可以使用Numpy和Loadtext:

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

这将创建一个数组,其中只包含所选列的数据。在

试试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

相关问题 更多 >