python - 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 中的两个值。我将如何尝试解决这个问题?
解决方案
这是对您已经编写的代码的简单调整:
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
推荐阅读
- python-3.x - 如何列出python程序所需的所有包?
- javascript - 将 html 作为输入传递给 Angular 组件
- react-native - npx @react-native-community/cli 医生 JDK 错误
- reactjs - 反应js添加过滤器
- c# - 错误 404 MVC ASP.NET 应用程序服务器错误“/”
- canoe - 将 .dat 从 CANoe 转换为日志文件
- c - int main(int argc, char* argv[]) 和 int main(int argc, char** argv) 有什么区别吗
- php - php调用类的最短版本
- mysql - 过滤和聚合不在 group by 子句 MySQL 中的列
- ios - 插件应使用后台线程(由于未捕获的异常“NSInvalidArgumentException”而终止应用程序)