【发布时间】:2016-07-28 21:45:00
【问题描述】:
我正在尝试在不使用任何第三方或框架提供的压缩库的情况下压缩 .csv 文件。
我已经尝试过,我想怎么想,一切。 我查看了 Huffman,但由于不允许我使用该解决方案,我尝试自己做。
一个例子:
6NH8,F,A,0,60541567,60541567,78.78,20
6NH8,F,A,0,60541569,60541569,78.78,25
6AH8,F,B,0,60541765,60541765,90.52,1
QMH8,F,B,0,60437395,60437395,950.5,1
我制作了一个算法,计算每个字符并给出它们被使用的次数,并且取决于它们被使用了多少次。
',' --- 28
'5' --- 18
'6' --- 17
'0' --- 15
'7' --- 10
'8' --- 8
'4' --- 8
'1' --- 8
'9' --- 6
'.' --- 4
'3' --- 4
'\n'--- 4
'H' --- 4
'F' --- 4
'2' --- 3
'A' --- 3
'N' --- 2
'B' --- 2
'M' --- 1
'Q' --- 1
[(',', 0), ('5', 1), ('6', 2), ('0', 3), ('7', 4), ('8', 5),
('4', 6), ('1', 7), ('9', 8), ('.', 9), ('3', 10), ('\n', 11),
('H', 12), ('F', 13), ('2', 14), ('A', 15), ('N', 16), ('B', 17),
('M', 18), ('Q', 19)]
所以我没有存储例如 ord('H') = 72,而是给 H 值 12,依此类推。
但是,当我将所有字符更改为我的值时,我生成的 cvs(>40MB) 仍然大于原始值(19MB)。
我什至尝试了将列表分为 2 的替代方法。即,将一行分成两行。
[6NH8,F,A,0,]
[60541567,60541567,78.78,20]
但仍然比我的“霍夫曼”版本更大,甚至更大。
问题: 任何人都对如何 1.读取一个.csv文件, 2.使用那个是库的东西。或第三者。 3.生成并写一个更小的.csv文件?
对于第 2 步,我不要求提供完整的计算解决方案,只是建议如何最小化文件,即将每个值写入一个列表?等等
谢谢
【问题讨论】:
-
为什么不想使用现有的库?
标签: python csv compression