2016-08-16 37 views
1

python中的新增功能,并尝试构建简单的CSV阅读器以创建现有工具的新交易。理想情况下,我想创建一个字典来简化设置新交易所需的参数(而不是使用行[1],[2],[3]等,我想用我的标题替换阅读价值日期,交易日期,价格,数量等)引用CSV阅读器的Python字典中的键

我已经在下面创建了字典键,但是无法将它们链接到我的脚本以创建新的交易。我应该如何替换行?任何建议感激!谢谢...下面

代码:

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() 
+0

如何通过排数字索引和键引用? Row是一个字典,所以我不确定'row [4]'是如何工作的,因为DictReader只会使用字符串字典键。 – Euan

+0

只要你知道,在你编辑之后,你不再创建一本字典,而是一套。 –

+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

Create an object which operates like a regular reader but maps the information read into a dict whose keys are given by the optional fieldnames parameter. The fieldnames parameter is a sequence whose elements are associated with the fields of the input data in order. These elements become the keys of the resulting dictionary. If the fieldnames parameter is omitted, the values in the first row of the csvfile will be used as the fieldnames. If the row read has more fields than the fieldnames sequence, the remaining data is added as a sequence keyed by the value of restkey. If the row read has fewer fields than the fieldnames sequence, the remaining keys take the value of the optional restval parameter.

+0

OP已经在使用'DictReader',但好像代码混合了'csv.reader'和'csv。,DictReader'代码 – Euan

+0

@Euan在编辑之前OP没有使用'DictReader' –

+1

抱歉混淆了@ Euan--这是正确的,我修改了我的代码以包含DictReader。我正在尝试更新以包含相关字段并收到以下错误消息:KeyError:'Instrument' –