首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用python将包含多个值的FIX标记写入字典

使用python将包含多个值的FIX标记写入字典
EN

Stack Overflow用户
提问于 2018-07-18 16:47:09
回答 1查看 296关注 0票数 0

我正在尝试将修复消息从.log文件导出到.csv文件。我逐行读取.log文件,将标记和值写入字典,然后将字典写入.csv文件。我遇到的问题与修复标记<128>有关,这些标记包含我无法读取并附加到字典的多个值。

下面是我的代码:

代码语言:javascript
复制
import os
import time
import csv

csvPath = 'C:/""/""/""/""/FixTakerLogs/'

    print('[START]:', 'MsgMarketDataRequest.csv')
    fileLogon = open('C:/""/""/""/""/""/MsgMarketDataRequest.log','r')
    with open(csvPath + 'MsgMarketDataRequest.csv', 'w', newline='') as csvLogon:
        dictLogon = {'8': '','9': '','35': '','49': '','56': '','34': '','52': '','128': '','262': '','263': '','264': '','265': '','267': '','269': '','146': '','55': '','167': '','63': '','12008': '','64': '','193': '','271': '','1201': '','1202': '','1300': '','10': ''}
        csvWriter = csv.DictWriter(csvLogon, dictLogon.keys())
        csvWriter.writeheader()
        for line in fileLogon:
            line = line.rstrip()
            line = line.split(',')
            X = len(line) - 1
            line = line[0:X]
            for tag in line:
                if tag in line:
                    tag = tag.split('=')
                    dictLogon[tag[0]] = tag[1]
            csvWriter.writerow(dictLogon)
    csvLogon.close()
    print('[END]:', 'MsgMarketDataRequest.csv')

下面是我读到的这一行:

代码语言:javascript
复制
'8=FIX.X.X,9=192,35=V,34=XXXX,49=XXX.XXXX.1,56=XXXX.XXXX,52=XXXXXXXX-XX:XX:XX.XX,128=**AAAA**,**BBBB**,262=XXX/XXX-XXXXXXXXXX,263=X,265=X,1021=X,264=X,267=X,269=X,269=X,146=X,55=XXX/XXX,167=XXXXX,1300=X,63=X,10=X'

这是我的建议:

代码语言:javascript
复制
Traceback (most recent call last):
  File "C:/git/Py/exportFixMessagesToExcel.py", line 145, in <module>
    dictLogon[tag[0]] = tag[1]
IndexError: list index out of range

我知道在进入第二个for循环之前,我需要找到标记<128>拆分它,并将两个值都写入字典,那么处理这个问题的最好方法是什么?谢谢。

EN

回答 1

Stack Overflow用户

发布于 2018-07-18 16:58:26

下面的代码一次只读取一行中的一个字母。

代码语言:javascript
复制
for tag in line:
                if tag in line:
                    tag = tag.split('=')
                    dictLogon[tag[0]] = tag[1]

例如,当它将执行所描述的'line‘时,它将保存tag='8’。所以,它不能被分成两部分,因为没有'=‘符号。因此,tag1超出范围。

可能的解决方案

代码语言:javascript
复制
#arbitrary value of dictionary and then the line
dictLogon={'firstValue':'34'}
line='8sdf=FIX.X.X,9=192,35=V,34=XXXX,49=XXX.XXXX.1,56=XXXX.XXXX,52=XXXXXXXX-XX:XX:XX.XX,128=**AAAA**,**BBBB**,262=XXX/XXX-XXXXXXXXXX,263=X,265=X,1021=X,264=X,267=X,269=X,269=X,146=X,55=XXX/XXX,167=XXXXX,1300=X,63=X,10=X'

#splitting line for converting it in required list shape
line = line.split(',')

#removing the values without '=' sign
line=[ x for x in line if "=" in x ]
for i in range(len(line)):
    a = line[i].split('=')
    dictLogon[a[0]] = a[1]
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51397489

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档