我正在尝试将修复消息从.log
文件导出到.csv
文件。我逐行读取.log
文件,将标记和值写入字典,然后将字典写入.csv
文件。我遇到的问题与修复标记<128>
有关,这些标记包含我无法读取并附加到字典的多个值。
下面是我的代码:
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')
下面是我读到的这一行:
'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'
这是我的建议:
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>
拆分它,并将两个值都写入字典,那么处理这个问题的最好方法是什么?谢谢。
发布于 2018-07-18 16:58:26
下面的代码一次只读取一行中的一个字母。
for tag in line:
if tag in line:
tag = tag.split('=')
dictLogon[tag[0]] = tag[1]
例如,当它将执行所描述的'line‘时,它将保存tag='8’。所以,它不能被分成两部分,因为没有'=‘符号。因此,tag1超出范围。
可能的解决方案
#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]
https://stackoverflow.com/questions/51397489
复制相似问题