列数据中的分隔符问题



这不是另一个问题的重复,因为我不想删除行。上述帖子中接受的答案与此答案非常不同,并且并非旨在维护所有数据。

问题:格式不正确的 csv 文件中列数据中的分隔符

尝试的解决方案:csv模块,shlex,StringIO(SO上没有有效的解决方案)

示例数据

分隔符位于第三个数据字段中,由(多个)双引号括起来:

08884624;6/4/2016;Network routing 21,5"" 4;8GHz1TB hddQwerty"";9999;resell:no;package:1;test
0085658;6/4/2016;Logic 111BLACK.compat: 29,46 cm (11.6"")deep: 4;06 cm height: 25;9 cm"";9999;resell:no;package:1;test
4235846;6/4/2016;Case Logic. compat: 39,624 cm (15.6"") deep: 3;05 cm height: 3 cm"";9999;resell:no;package:1;test
400015;6/4/2016;Cable""Easy Cover"""";1;5 m 30 Silver"";9999;resell:no;package:1;test
9791118;6/4/2016;Network routing 21,5"" (2013) 2;7GHz"";9999;resell:no;package:1;test
477000;6/4/2016;iGlaze. deep: 9,6 mm (67.378"") height: 14;13 cm"";9999;resell:no;package:1;test
4024001;6/4/2016;DigitalBOX. tuner: Digital, Power: 20 W., Diag: 7,32 cm (2.88""). Speed 10;100 Mbit/s"";9999;resell:no;package:1;test

所需的样本输出

固定长度为 7:

['08884624','6/4/2016', 'Network routing 21,5" 4,8GHz1TB hddQwerty', '9999', 'resell:no', 'package:1', 'test']

通过 csv 阅读器解析并不能解决问题(skipinitialspace 不是问题),shlex 没有用,StringIO 也没有帮助......

我最初的想法是逐行导入,并在行中逐个元素替换";"。 但是导入是问题所在,因为它在每个";"上都会拆分。

数据来自包含 300.000+ 行的较大文件(并非所有行都有此问题)。 欢迎任何建议。

正如您所知输入字段的数量,并且只有一个字段的格式不正确,您可以简单地拆分;然后将中位数字段合并为一个:

for line in file:
temp_l = line.split(';')
lst = temp_l[:2] + [ ';'.join(l[2:-4]) ] + l[-4:] #lst should contain the expected fields

我什至没有尝试处理双引号,因为我无法理解您如何从Network routing 21,5"" 4;8GHz1TB hddQwerty""传递到'Network routing 21,5" 4,8GHz1TB hddQwerty'......

您可以使用标准CSV模块。

要实现您要完成的任务,只需将有问题的 csv 分隔符更改为";">

在终端中测试以下内容:

import csv 
test = ["4024001;6/4/2016;DigitalBOX. tuner: Digital, Power: 20 W., Diag: 7,32 cm (2.88""). Speed 10;100 Mbit/s"";9999;resell:no;package:1;test"]
delimited_colon = list(csv.reader(b, delimiter=";", skipinitialspace=True))

最新更新