我正在从 CSV 文件中读取行并创建一个包含所有行的列表列表。最后我将列表的列表发送到 MySQL 数据库。CSV 文件中约有 150 万行。整个过程大约需要一分半钟,这没有问题,列表列表的大小也没有问题。下面是从 CSV 文件中摘录的示例,由于实际列数较多而进行了简化:
['AIDS mortality - Females', 'Rate', 'Females estimate', 'All countries', '03M49WLD', 1994, 0.110264]
['AIDS mortality - Females', 'Rate', 'Females upper estimate', 'All countries', '03M49WLD', 1994, 0.120264]
['HIV Incidence - males 15-24', 'Rate', 'Males (15-24)', 'upper estimate', 'Patigi', 'NGA_3_396', 2019, 0.00068]
['AIDS mortality - Females', 'Rate', 'Females lower estimate', 'All countries', '03M49WLD', 1994, 0.100264]
...
挑战在于我需要将给定“指标”(第一个值)的估计值、上估计值和下估计值放入单个列表中,以便它们最终位于数据库中的同一行。在此示例中,三行带有AIDS mortality - Females. 数据库表的每一行都有用于估计/下限/上限的列。这意味着我最终得到的数据库行数仅为原始 CSV 文件行数的三分之一。
让事情变得复杂的是,我无法对 CSV 文件中的三个相应行(估计/上/下)可以找到的位置做出任何假设。这里它们在一起是为了说明,但实际上它们可以相距一百万行。
我尝试过暴力破解该问题,因此对于从 CSV 文件读取的每个新行,扫描所有列表以查看所有其他值是否相同,除了估计值/上估计值/下估计值。如果是,则合并,如果不是,则创建新列表。然而,这是非常低效的并且花费太长时间。
我觉得这里有一个技巧,经验丰富的开发人员会知道优化这个过程。
慕慕森
相关分类