繁体   English   中英

读取与库存相关的csv文件有困难

[英]Difficulty in reading csv files that relates with stocks

编写一个名为“ read_prices”的函数,该函数采用一个参数,该参数是贵公司在其投资组合中拥有的股票代码的列表。 您将为每个股票行情代码读取一个CSV文件,其中包含一年中每种股票的价格,并将这些价格返回到单个词典中。 返回的字典将包含股票代码作为键,将字典符号作为值,其中内部字典将日期作为键(作为字符串,格式为“ YYYY-MM-DD”),价格作为浮点值。 所有人都说,该词典将包含过去一年中任何日期的任何股票的价格。 您可以假设输入列表中每个股票代号都将有一个名为“ .csv”的文件。 例如,如果代码列表中包含“ TXN”,则在测试过程中,名为“ TXN.csv”的文件将与您的代码位于同一目录中,并且此CSV文件的每一行将采用“日期,价格,体积”格式”,其中日期的格式为YYYY-MM-DD,价格为浮动价格,交易量为整数,代表所有交易者当天交易的股票数量(此预习课不需要交易量) 。

AAPL库存示例行:“ 2015-10-20,112.673677,48967800”

import csv
def read_prices(ticker):
    with open(ticker) as f:
        reader = csv.reader(f)
        dict = {}
        for items in reader:
            if items[0] in dict:
                dict[items[0]] += float(items[1]) * int(items[2])
            else:
                dict[items[0]] = float(items[1]) * int(items[2])
    return dict

输入[['AAPL','GOOG','FB']]出现错误。 我该如何解决这个问题?

如作业说明所述,输入文件的名称以代码名称开头,后跟.csv因此您应将.csv连接到股票名称作为文件名。 您的函数还将输入视为一个股票代号名称,而不是股票代号名称列表,因此自然无法将列表传递给它。 您应该遍历输入作为代码清单列表:

import csv
def read_prices(tickers):
    d = {}
    for ticker in tickers:
        with open(ticker + '.csv') as f:
            for date, price, _ in csv.reader(f):
                d.setdefault(ticker, {})[date] = float(price)
    return d

或者,您可以使用dict理解来完成相同的操作:

def read_prices(tickers):
    return {ticker: {date: price for date, price, _ in csv.reader(open(ticker + '.csv'))} for ticker in tickers}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM