如何在 Python3 中分隔分隔的 SQL 列值<SOH>作为单独的列?



CSV文件:

没有头

8=Fix1.1<SOH>9=70<SOH>35=AE<SOH>10=237 ----This entire message is FIXData value
8=Fix1.1<SOH>9=71<SOH>35=AE<SOH>10=238
8=Fix1.1<SOH>9=72<SOH>35=AE<SOH>10=239
8=Fix1.1<SOH>9=73<SOH>35=AE<SOH>10=240

如何从查询MS DB中获取数据到CSV文件的代码片段。

cnxn = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};SERVER=server;DATABASE=abc;UID=user;PWD=password')
sql = """select FIXData from table WHERE MessageTimestamp BETWEEN '2021-09-20 07:00:00' AND '2021-09-20 07:01:00';"""

rows = cursor.execute(sql)

with open(r'HOME/sqlresults.csv', 'w', newline='') as csvfile:
writer = csv.writer(csvfile)
#    writer.writerow([x[0] for x in cursor.description]) --- dont want headers
for row in rows:
writer.writerow(row)

问题:

  • 从CSV文件中可以看出,整个FIX消息被压缩到一个单元格中(这里考虑Excel)。
  • FIX消息被分隔,基本上我想把标签分隔成单独的单元格。

期望输出值:

  • CSV文件格式(理想情况下用';'分隔),以便当我在excel中打开CSV时,标签值将在那里自己的单元格中,而不是压缩在一个。
8=Fix1.1;9=70;35=AE;10=237
8=Fix1.1;9=71;35=AE;10=238
8=Fix1.1;9=72;35=AE;10=239
8=Fix1.1;9=73;35=AE;10=240 

期望输出:

  • 这是可选的,但如果可以在上述范围内完成将会很有帮助。
  • 删除标签
  • 的第一部分

CSV文件

Fix1.1;70;AE;237
Fix1.1;71;AE;238
Fix1.1;72;AE;239
Fix1.1;73;AE;240

注意:

  • 请注意我不能使用第三方模块(不使用Pandas数据框架等)

最后,我想我将使用Python replace方法将SOH字符转换为,,从而得到上述所需的输出。

我设法得到一个解决方案使用线程,如何搜索和替换文件中的文本?

# Read in the file
with open('file.txt', 'r') as file :
filedata = file.read()
# Replace the target string
filedata = filedata.replace('x01', ',') ---- Using RHEL based system so found 'u001' didnt work for me. Dont know the details of why....
# Write the file out again
with open('file.txt', 'w') as file:
file.write(filedata)