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

时间:2018-10-15 02:55:11

标签: python csv dictionary

编写一个名为“ 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']]时出错。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

正如作业描述中所述,您的输入文件以代码名称命名,后跟.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}