减小十进制 .csv 文件的文件大小

3
我需要尽可能地将大量信息压缩成小文件大小。在这种情况下,数据以逗号分隔的格式存储,并且所有值都存储为2位小数(没有标题)。
我已经查看了一下,我的理解是我所需的所有字符都使用ASCII(每个字符1个字节)存储在我目前使用的标准.txt文件中。显然,ASCII有256个可能的值,这比我需要的要多得多 - 我只需要16个字符就可以了。
我能否将我的数据保存在某种4位文本文件中?我将使用c#创建文件(所有谷歌搜索结果都是关于如何制作文本文件而不是如何制作更小的“字体”文本的建议)。这样做最终能节省空间吗? 我可以在发送之前压缩任何内容,但是如果您有任何有关缩小文件大小的想法,请告诉我。

3
如果不改变文件格式(或使用压缩算法,这可能会改变格式),那么这个文件的大小不会变小。您为什么需要它是CSV文件呢?如果将其存储为二进制文件,它肯定可以更小。但如果您要与其他期望CSV格式的应用程序进行交互,则任何尝试使其更小都会阻止该应用程序读取它。 - Cody Gray
3
可以压缩一下这个文件吗? - mjwills
1
你可以轻松地通过编程将数据压缩成zip格式,因此我建议这样做,而不是尝试自己创建压缩格式。当然,这样一来它就不再是CSV文件了,如果你要做出这种改变,为什么不进一步将文件存储为二进制数再进行压缩呢? - Matthew Watson
1
如果你只是想要一个小的CSV文件,那么建议你将它压缩成ZIP格式。这样可以大大减少重复文本,同时也能获得ZIP格式的高压缩率。这样既能享受到标准格式(CSV)的所有优点,又能获得小文件(ZIP)的所有好处。 - mjwills
@usr 这将被一段 C# 代码读取。 - High Plains Grifter
显示剩余6条评论
2个回答

2
"最初的回答":
这个文件将被一段C#代码读取,因此您可以控制序列化格式,可以选择任何喜欢的格式。为了节省空间并重用现有代码,快速压缩CSV是一个好方法。Gzip内置但不太强大,您可以使用7-Zip库,7-Zip算法是最先进的,可以消除小数点引起的冗余,并主要使用0-9字符。虽然不能完全消除,但可以达到99%的效果。您可以使用BinaryReader/Writer更高效的格式来写入自定义内容。Protocol Buffers也是一个比较简单且非常紧凑的选择。

0

我认为这个问题是合理的,但答案是你施加了逻辑条件,没有留下任何解决方案的空间。

所以,如果您可以避免使用CSV结构来自定义结构,您可以节省一些东西,但您需要它,并且它几乎确定了您的解决方案。唯一剩下的变量是如何编码文本,但您无法使用少于8位对文本进行编码,您只能使用更高的值,例如Unicode(16位)。

我不会评论使用压缩,因为您已经提到您正在寻找替代答案,并且您已经意识到了这一点。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接