将多行*.dat记录解析为单行的最佳工具

2024-06-26 14:03:16 发布

您现在位置:Python中文网/ 问答频道 /正文

寻找一些关于将多行txt记录处理成一行以输入Postgresql数据库的最佳工具的见解

数据以*.dat文件格式保存

B;666;4148672;2;20200803 01:04;;;5;AQUARIUS;VIRGO;2345470;1000;M;20200714;20200724;150000;R2;V;XX;;AFE;;0;ZZZZ396;
C;666;4148672;2;20200803 01:04;117-508A, 385-404B, 2-5A-C4387, 564654-25, 564654-24;
C;666;4148672;2;20200803 01:04;546654-28, 42785A-B-8, 44915-8-4;
D;666;4148672;2;20200803 01:04;P;;;;;;
D;666;4148672;2;20200803 01:04;V;;;;;;
B;666;4148672;3;20200803 01:04;;;5;TAURUS;AIRIES;586559;1000;M;20200714;20200724;150000;R2;V;XX;;AFE;;0;ZZZZ396;
C;666;4148672;3;20200803 01:04;5587T-33, 5454X-A;
D;666;4148672;3;20200803 01:04;P;;;;;;
D;666;4148672;3;20200803 01:04;V;;;;;;
B;667;4148672;1;20200803 01:04;;;5;AERO;GUNYA;586559;1000;M;20200714;20200724;150000;R2;V;XX;;AFE;;0;ZZZZ396;
C;667;4148672;1;20200803 01:04;8978-4;
D;667;4148672;1;20200803 01:04;P;;;;;;
D;667;4148672;1;20200803 01:04;V;;;;;;

那是3张唱片

分隔符是分号,非常可靠。我对所有领域都有很好的了解。该文件有一个标题行,a表示日期,最后一行是Z表示所有记录的计数。这里显示的第一列B、C、D表示必须连接的属性,C行可以重复一次或多次以创建一个约1000个字符的字段。似乎作者在一行中可以写多少个字符是有限制的

显然,如果一个答复包含一个完整的解决方案,我会很高兴,但我的问题是

有什么工具可以解决这个问题?这个格式可能不是唯一的

用例将在服务器上自动化,python将可用,postgresql也是如此


编辑以显示3条记录


Tags: 工具数据txt数据库postgresql记录datr2
1条回答
网友
1楼 · 发布于 2024-06-26 14:03:16

我想这就是你想要的,不过如果你能提供一个样本输出,我可以根据需要编辑它。(这三行应该是什么?)

with open('myfile.txt') as file_handle:
    file_content = file_handle.read()

list_of_lines = []
concatenated_line = ""
for line in file_content.split('\n'):
    if line.startswith('B'):
        if len(concatenated_line)>0:
            list_of_lines.append(concatenated_line)
        concatenated_line = line
    else:
        concatenated_line+=line
list_of_lines.append(concatenated_line)
      
for line in list_of_lines:
    print(line.split(';'))

哪一个产生输出

['B', '666', '4148672', '2', '20200803 01:04', '', '', '5', 'AQUARIUS', 'VIRGO', '2345470', '1000', 'M', '20200714', '20200724', '150000', 'R2', 'V', 'XX', '', 'AFE', '', '0', 'ZZZZ396', 'C', '666', '4148672', '2', '20200803 01:04', '117-508A, 385-404B, 2-5A-C4387, 564654-25, 564654-24', 'C', '666', '4148672', '2', '20200803 01:04', '546654-28, 42785A-B-8, 44915-8-4', 'D', '666', '4148672', '2', '20200803 01:04', 'P', '', '', '', '', '', 'D', '666', '4148672', '2', '20200803 01:04', 'V', '', '', '', '', '', '']
['B', '666', '4148672', '3', '20200803 01:04', '', '', '5', 'TAURUS', 'AIRIES', '586559', '1000', 'M', '20200714', '20200724', '150000', 'R2', 'V', 'XX', '', 'AFE', '', '0', 'ZZZZ396', 'C', '666', '4148672', '3', '20200803 01:04', '5587T-33, 5454X-A', 'D', '666', '4148672', '3', '20200803 01:04', 'P', '', '', '', '', '', 'D', '666', '4148672', '3', '20200803 01:04', 'V', '', '', '', '', '', '']
['B', '667', '4148672', '1', '20200803 01:04', '', '', '5', 'AERO', 'GUNYA', '586559', '1000', 'M', '20200714', '20200724', '150000', 'R2', 'V', 'XX', '', 'AFE', '', '0', 'ZZZZ396', 'C', '667', '4148672', '1', '20200803 01:04', '8978-4', 'D', '667', '4148672', '1', '20200803 01:04', 'P', '', '', '', '', '', 'D', '667', '4148672', '1', '20200803 01:04', 'V', '', '', '', '', '', '']

相关问题 更多 >