- 主题:python有办法并行写入一个zip文件吗?
zip 不是固实压缩。可以随机访问。楼主的需求可以做到。但不好做。
主要原因是在压缩之前,并不知道最终压缩得到多少字节。
如果是 tar 就做不到了。
事实上 7zip 官方就实现了多线程地压缩与解压缩。
【 在 poggy 的大作中提到: 】
: 这个不太行, 也没有意义, zip文件就像像归档的磁带, 是顺序存储的, 随机存储性能很差。
: 一定要并行, 那还不如各自压缩成包, 最好在用只存储不压缩的方式, 归档到一个zip里面。
: 如果, 一定要并行, 还是用kv数据库吧, 平行性好多了。
: ...................
--
FROM 117.28.110.*
没啥原理啊。就是每个文件可以单独地压缩。
最后写个文件头,把每个被压缩后的文件顺序写入就行了。
【 在 JulyClyde 的大作中提到: 】
: 7zip啥原理啊??
--
FROM 117.28.110.*
如果是修改的话。7zip 一样的得重新生成。比如删除一个 1MB 大小的文件,写入 1KB 的另外一个文件。那一定得重写吧,总不能放空白对吧?
所以这个并行,可以用在重新创建文件时。先压缩得到结果,放在内存。最后写入文件列表、字典和内容。
具体的,或许你们可以看一下 7zip 的压缩对话框。我没有看过它的源代码,也只是从使用方式上面去猜测。
【 在 poggy 的大作中提到: 】
: 从我的感觉看, 一个zip文件, 增删文件, 除非在末尾,
: 如果, 从中间删除增加一些文件, 大概率是需要从头到尾重新生成,所以,
: 这个随机估计仅仅限于读取。
: ...................
--
FROM 117.28.110.*
这我就不知道了啊。。
不过从压缩率角度考虑。使用公用的字典能够提供更高的压缩率。
【 在 JulyClyde 的大作中提到: 】
: 那最后不还得顺序写入吗?
: 按说zip也可以各文件分别压缩然后顺序写入吧?应该是一样的?
: 还是说zip内各文件的压缩字典是公用的?
: ...................
--
FROM 117.28.164.*
这也太恶心了吧。如果旧的文件很大,岂不是非常浪费?
【 在 JulyClyde 的大作中提到: 】
: 你的感觉是错的哦
: zip的目录在尾部。可以单独更新删除内部文件
: 实质上是新增一段新的在后面,废弃掉旧的,但是并不回收空间
: ...................
--
FROM 117.28.164.*