使用python解压大型文件
我试图使用python解压各种大小的文件(有些大小为4GB或更大),但是我注意到,在某些情况下,尤其是当文件非常大时,文件无法解压。当我打开新的结果文件时,它是空的。下面是我正在使用的代码-我的方法有什么问题吗使用python解压大型文件,python,gzip,Python,Gzip,我试图使用python解压各种大小的文件(有些大小为4GB或更大),但是我注意到,在某些情况下,尤其是当文件非常大时,文件无法解压。当我打开新的结果文件时,它是空的。下面是我正在使用的代码-我的方法有什么问题吗 inF = gzip.open(localFile, 'rb') localFile = localFile[:-3] outF = open(localFile, 'wb') outF.write( inF.read()
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的文件(我想),但它应该一直写到遇到这个限制,然后崩溃。