使用python解压大型文件

使用python解压大型文件,python,gzip,Python,Gzip,我试图使用python解压各种大小的文件(有些大小为4GB或更大),但是我注意到,在某些情况下,尤其是当文件非常大时,文件无法解压。当我打开新的结果文件时,它是空的。下面是我正在使用的代码-我的方法有什么问题吗 inF = gzip.open(localFile, 'rb') localFile = localFile[:-3] outF = open(localFile, 'wb') outF.write( inF.read()

我试图使用python解压各种大小的文件(有些大小为4GB或更大),但是我注意到,在某些情况下,尤其是当文件非常大时,文件无法解压。当我打开新的结果文件时,它是空的。下面是我正在使用的代码-我的方法有什么问题吗

        inF = gzip.open(localFile, 'rb')
        localFile = localFile[:-3]
        outF = open(localFile, 'wb')
        outF.write( inF.read() )
        inF.close()
        outF.close()

这段代码循环输入数据块,将每个数据块写入输出文件。通过这种方式,我们不会一次将整个输入读取到内存中,从而节省内存并避免神秘的崩溃

import gzip, os

localFile = 'cat.gz'
outFile = os.path.splitext(localFile)[0]

print 'Unzipping {} to {}'.format(localFile, outFile)

with gzip.open(localFile, 'rb') as inF:
    with open( outFile, 'wb') as outF:
        outF.write( inF.read(size=1024) )

这段代码循环输入数据块,将每个数据块写入输出文件。通过这种方式,我们不会一次将整个输入读取到内存中,从而节省内存并避免神秘的崩溃

import gzip, os

localFile = 'cat.gz'
outFile = os.path.splitext(localFile)[0]

print 'Unzipping {} to {}'.format(localFile, outFile)

with gzip.open(localFile, 'rb') as inF:
    with open( outFile, 'wb') as outF:
        outF.write( inF.read(size=1024) )

在本例中,您似乎不需要python对读入的文件进行任何处理,因此最好只使用
subprocess.Popen

from subprocess import Popen
Popen('gunzip %s %s' % (infilename, outfilename)).wait()

您可能需要传递
shell=True
,但除此之外应该是好的

在这种情况下,您似乎不需要python对读入的文件进行任何处理,因此您最好只使用
subprocess.Popen

from subprocess import Popen
Popen('gunzip %s %s' % (infilename, outfilename)).wait()

您可能需要传递
shell=True
,但除此之外,还需要传递另一个大型
.zip
文件的解决方案(适用于Ubuntu 16.04.4)。 首先安装7z:

sudo apt-get install p7zip-full
然后在python代码中,使用以下命令调用7zip:

import subprocess
subprocess.call(['7z', 'x', src_file, '-o'+target_dir])

大型
.zip
文件的另一种解决方案(适用于Ubuntu 16.04.4)。 首先安装7z:

sudo apt-get install p7zip-full
然后在python代码中,使用以下命令调用7zip:

import subprocess
subprocess.call(['7z', 'x', src_file, '-o'+target_dir])

没有错误消息或异常,只有unix上的空文件检查
/var/log/syslog
,或windows中的事件选项卡。你可能已经超过了你机器上的内存,在这种情况下,操作系统会立即取消你的进程。您应该会看到一些类型的消息,例如
OutOfMemory
或类似的消息。这个过程永远不会消失,它会继续,我怀疑这可能是内存问题,但最简单的解决方法是什么?尝试使用上下文语法:
和gzip.open(localFile,'rb')作为inF:
和open(localFile,'wb'))作为outp:
和最后的
outp.write(inF.read())
。这在功能上应该是相同的,但我听过一些模糊的说法,当你使用这种语法时,Python的表现会更好,所以也许它会有所帮助?你使用的是什么操作系统?在WindowsXP32位中,你不能创建大于2GB的文件(我想)但它应该一直写入,直到遇到该限制,然后崩溃。没有错误消息或异常,只有unix上的空文件检查
/var/log/syslog
,或windows中的“事件”选项卡。你可能已经超过了你机器上的内存,在这种情况下,操作系统会立即取消你的进程。您应该会看到一些类型的消息,例如
OutOfMemory
或类似的消息。这个过程永远不会消失,它会继续,我怀疑这可能是内存问题,但最简单的解决方法是什么?尝试使用上下文语法:
和gzip.open(localFile,'rb')作为inF:
和open(localFile,'wb'))作为outp:
和最后的
outp.write(inF.read())
。这在功能上应该是相同的,但我听过一些模糊的说法,当你使用这种语法时,Python的表现会更好,所以也许它会有所帮助?你使用的是什么操作系统?在WindowsXP32位中,你不能创建大于2GB的文件(我想),但它应该一直写到遇到这个限制,然后崩溃。