【发布时间】:2021-11-17 06:04:38
【问题描述】:
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 消息被压缩到 1 个单元格中(此处考虑 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 数据框等)
【问题讨论】:
-
我会敦促您修复您的数据结构。你违反了 1NF,这就是为什么这是一个挑战。如果这不可行,那么我建议在您的查询中执行此操作。使用不错的拆分功能相当容易。在较新的版本中有一个内置的拆分器,但它有些限制,因为它们未能在输出中提供边缘犯罪的等级。
-
同意 1NF 这意味着他们不能将消息转储到单独的行/列中。不幸的是,鉴于 Networks 团队将消息转储到数据库中,我对此没什么好争辩的。请您详细说明拆分功能吗?我获得了一个只读帐户,因此无法修改表格等。
标签: sql-server python-3.x xml csv