首页 > 解决方案 > csv读取文件的问题

问题描述

编写一个名为“quantities_owned”的函数,该函数接受一个参数,该参数是一个字符串,该字符串表示一个文件名,该文件名包含贵公司全年进行的所有交易,并返回一个字典,其中包含公司拥有的每只股票的数量(按股票代码)。CSV 文件的每一行将包含格式为“buy_or_sell,quantity,ticker,date”的单笔交易,其中 buy_or_sell 是字符串“buy”或“sell”,数量是表示交易股票数量的整数,ticker 是表示正在交易的股票代码的字符串,日期是交易日期,格式为 YYYY-MM-DD。此函数将返回一个字典,其中包含股票代码作为键,每个股票代码拥有的份额数作为整数值。

例如,如果输入文件包含:

buy,1700,XOM,2015-01-26
buy,1900,AAPL,2015-02-13
sell,700,XOM,2015-02-17
buy,700,AAPL,2015-02-17

那么输出将是 {'AAPL': 2600, 'XOM':1000}。(下面是我的代码)

import csv
def quantities_owned(filename):
    with open(filename) as f:
        reader = csv.reader(f)
        dicti = {}
        for row in reader:
            dicti[str(row[2])] = int(row[1])
    return dicti

我很难区分键 buy_or_sell 中的两个值。我将如何尝试解决这个问题?

标签: pythonpython-3.xcsvdictionarydataframe

解决方案


这是对您已经编写的代码的简单调整:

import csv
def quantities_owned(filename):
    tran = {'buy': 1, 'sell': -1}
    with open(filename) as f:
        reader = csv.reader(f)
        dicti = {}
        for row in reader:
            if row[2] in dicti:
                dicti[row[2]] += tran[row[0]] * int(row[1])
            else:
                dicti[row[2]] = tran[row[0]] * int(row[1])
    return dicti

或者,使用defaultdict

from collections import defaultdict
import csv
def quantities_owned(filename):
    tran = {'buy': 1, 'sell': -1}
    with open(filename) as f:
        reader = csv.reader(f)
        dicti = defaultdict(int)
        for row in reader:
            dicti[row[2]] += tran[row[0]] * int(row[1])
    return dicti

推荐阅读