【发布时间】:2018-01-08 13:01:01
【问题描述】:
我有一个包含数百万行的大文件(1.6 gigs),其中的列分隔为:
[||]
我尝试使用 csv 模块,但它说我只能使用单个字符作为分隔符。所以这就是我所拥有的:
fileHandle = open('test.txt', 'r', encoding="UTF-16")
thelist = []
for line in fileHandle:
fields = line.split('[||]')
therow = {
'dea_reg_nbr':fields[0],
'bus_actvty_cd':fields[1],
'drug_schd':fields[3],
#50 more columns like this
}
thelist.append(therow)
fileHandle.close()
#now I have thelist which is what I want
然后繁荣,现在我有一个字典列表,它可以工作。我想要一个列表,因为我关心订单,还有字典,因为它在下游是预期的。这只是感觉我应该利用一些更有效的东西。我认为这不适用于超过一百万行和如此多的数据。所以,我的问题如下:
获取多字符分隔文本文件(UTF-16 编码)并创建字典列表的更有效方法是什么?
任何想法将不胜感激!
【问题讨论】:
-
请注意,字典是在 python 3.6 中排序的;)
-
一个明显的改进是使用
generator和yield行而不是使用list,但是如果您确实需要将输出作为list,这不是一个可行的改进. -
这可能是开始使用 pandas 的好日子。
-
谈到内存使用,
namedtuple或带有__slots__的简单类将通过避免为每一行创建一个dict来节省一些字节。见this answer -
@TomWyllie:当人们真正需要的是一个可迭代对象时,通常会创建一个列表......如果 OP 稍后一次处理一个字典,那么生成器将非常好并且具有高度可扩展性
标签: python list csv dictionary slurp