Python - 使用大型集合(7k +)对集合成员资格进行高效测试

时间:2018-01-18 22:11:38

标签: python python-2.7 performance list

我在Python中解析大量分隔的文本文件(超过10k,每个介于1GB和20GB之间),并提取行中的字符串值(列值)在超过7k项目列表中的行。我当前的代码看起来像这样:

if columns[idx] in ['1234567','2234567'...(add another 7k items here)]:

可能的项目列表超过69k,我发现没有模式可以更有效地测试是否应该包含项目。例如,如果存在诸如“如果前2个字符是'12'然后包括项目'之类的模式,则会更有效,但我没有看到任何类似的模式。有谁知道更有效的方法吗?您可能想知道为什么我不将数据导入数据库。有两个原因。一,我没有一个数据库,有足够的空间来容纳数据,两个,该文件使用非标准的列分隔符 - '\ x01'。

毫不奇怪,PyCharm性能分析器将此行显示为我的代码中的主要瓶颈。我已经测试了删除这一行并将所有数据写入文本文件,然后我可以将零碎地加载到数据库中(然后我可以对其进行过滤),但是“in”过滤90%的数据并写出所有数据数据比使用'in'过滤要慢。

我在Windows 10上使用Python 2.7.12。我还可以使用Ubuntu 12.04.5机器(使用Python 2.7.12)。

0 个答案:

没有答案