栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Python-如何在没有MemoryError的情况下gzip压缩大型文本文件?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python-如何在没有MemoryError的情况下gzip压缩大型文本文件?

真奇怪 如果您尝试压缩不包含许多换行符的大型二进制文件,则可能会出现此错误,因为这样的文件可能包含对RAM而言太大的“行”,但不应在行上发生-
结构化的.csv文件。

但是无论如何,逐行压缩文件并不是很有效。即使OS缓存的磁盘I / O是一般 多少 更快地读取和写入较大的数据块,如64 KB。

我在这台机器上有2GB的RAM,并且我刚刚成功使用下面的程序压缩了2.8GB的tar存档。

#! /usr/bin/env pythonimport gzipimport sysblocksize = 1 << 16     #64kBdef gzipfile(iname, oname, level):    with open(iname, 'rb') as f_in:        f_out = gzip.open(oname, 'wb', level)        while True: block = f_in.read(blocksize) if block == '':     break f_out.write(block)        f_out.close()    returndef main():    if len(sys.argv) < 3:        print "gzip compress in_file to out_file"        print "Usage:n%s in_file out_file [compression_level]" % sys.argv[0]        exit(1)    iname = sys.argv[1]    oname = sys.argv[2]    level = int(sys.argv[3]) if len(sys.argv) > 3 else 6    gzipfile(iname, oname, level)if __name__ == '__main__':      main()

我正在运行Python 2.6.6,

gzip.open()
但不支持
with


正如安德鲁·贝(Andrew Bay)在评论中指出的那样

if block =='':
,由于
block
包含字节而非字符串,并且空字节对象不等于空文本字符串,因此在Python 3中无法正常工作。我们 可以
检查代码块的长度,也可以进行比较
b''
(也可以在Python 2.6+中使用),但是简单的方法是
if not block:



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/611214.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号