为CSV阅读器引用Python字典中的键

时间:2016-08-16 15:24:36

标签: python csv dictionary key

python的新手,并尝试构建一个简单的CSV阅读器来创建现有乐器的新交易。理想情况下,我想建立一个字典来简化设置新交易所需的参数(而不是使用行[1],[2],[3]等,我想要更换我的标题读取值日期,交易日期,价格,数量等。)

我已经在下面创建了字典键,但是在将它们链接到我的脚本以创建新的交易时遇到了问题。我应该用什么来代替行?任何建议赞赏!感谢...

以下代码:

import acm
import csv

# Opening CSV file
with open('C:\Users\Yina.Huang\Desktop\export\TradeBooking.csv', 'rb') as f:
reader = csv.DictReader(f, delimiter=',')
next(reader, None)

for row in reader:

    # Match column header with column number
    d = {
        row["Trade Time"],
        row["Value Day"],
        row["Acquire Day"],
        row["Instrument"],
        row["Price"],
        row["Quantity"],
        row["Counterparty"],
        row["Acquirer"],
        row["Trader"],
        row["Currency"],
        row["Portfolio"],
        row["Status"]
        }

    NewTrade = acm.FTrade()      
    NewTrade.TradeTime = "8/11/2016 12:00:00 AM"
    NewTrade.ValueDay = "8/13/2016"
    NewTrade.AcquireDay = "8/13/2016"
    NewTrade.Instrument = acm.FInstrument[row["Instrument"]]
    NewTrade.Price = row[4]
    NewTrade.Quantity = row[5]
    NewTrade.Counterparty = acm.FParty[row[6]]
    NewTrade.Acquirer = acm.FParty[row[7]]
    NewTrade.Trader = acm.FUser[row[8]]
    NewTrade.Currency = acm.FCurrency[row[9]]
    NewTrade.Portfolio = acm.FPhysicalPortfolio[row[10]]
    NewTrade.Premium = (int(row[4])*int(row[5]))
    NewTrade.Status = row[11]

    print NewTrade
    NewTrade.Commit()

1 个答案:

答案 0 :(得分:1)

csv模块已经为csv.DictReader对象提供了此功能。

with open('C:\Users\Yina.Huang\Desktop\export\TradeBooking.csv', 'rb') as f:    
    reader = csv.DictReader(f)
    for row in reader:

        NewTrade = acm.FTrade()      
        NewTrade.TradeTime = row['Trade Time']
        NewTrade.ValueDay = row['Value Day']
        NewTrade.AcquireDay = row['Aquire Day']
        NewTrade.Instrument = acm.Finstrument[row['Instrument']]
        NewTrade.Price = row['Price']
        NewTrade.Quantity = row['Quantity']
        # etc

来自documentation

  

创建一个像普通读者一样操作的对象,但是映射它   读入dict的信息,其密钥由可选项给出   fieldnames参数。 fieldnames参数是一个序列   元素按顺序与输入数据的字段相关联。   这些元素成为结果字典的关键。如果   fieldnames参数被省略,第一行的值为   csvfile将用作字段名。如果读取的行有更多   字段比字段名序列,其余数据添加为   序列由restkey的值键入。如果读取的行数较少   字段比字段名序列,其余键取值   可选的restval参数。