我正在从USGS订购大量的Landsat场景,它们以tar.gz归档文件的形式提供。我正在编写一个简单的Python脚本来解压它们。每个归档文件包含15个大小在60-120 MB之间的tiff图像,总共超过2 GB。我可以使用以下代码轻松地提取整个归档文件:
import tarfile
fileName = "LT50250232011160-SC20140922132408.tar.gz"
tfile = tarfile.open(fileName, 'r:gz')
tfile.extractall("newfolder/")
实际上,我只需要这15个tiff文件中的6个,这些在标题中被标识为“bands”。它们是一些较大的文件,因此它们共占了约一半的数据。所以,我认为可以通过以下方式修改代码来加快这个过程:
fileName = "LT50250232011160-SC20140922132408.tar.gz"
tfile = tarfile.open(fileName, 'r:gz')
membersList = tfile.getmembers()
namesList = tfile.getnames()
bandsList = [x for x, y in zip(membersList, namesList) if "band" in y]
print("extracting...")
tfile.extractall("newfolder/",members=bandsList)
然而,将计时器添加到两个脚本中并没有显示出第二个脚本的显着效率提高(在我的系统上,单个场景中两者都运行约一分钟)。虽然提取速度有所加快,但似乎这种增益被找出需要首先提取哪些文件所需的时间所抵消了。
问题是,这种权衡是我所做的事情固有的,还是只是我的代码效率低下的结果?我对python相对较新,今天才发现tarfile,因此如果后者是真的,我不会感到惊讶,但我还没有能够找到任何关于有效提取归档部分的建议。
谢谢!
tarfile
已经针对非流情况进行了改进... - user3204459'r|gz'
比原来快了一个数量级。因此,我可以轻松地放弃在tar流中返回的能力。Python 2.7.18(tarfile修订版85213) - user8162