我可以在没有解压缩的情况下在tar.gz中读写文件吗?

时间:2017-03-21 13:25:25

标签: python image gzip tar

问题大纲:我们可以在没有解压缩的情况下在tar.gz中读写文件吗?

我有很多名为tar.gz的{​​{1}}个文件 每个GF1_PMS1_E72.0_N33.6_20160507_L1A0001568810.tar.gz文件都包含以下文件:

tar.gz

我想在没有解压缩的情况下阅读GF1_PMS1_E72.6_N33.6_20160511_L1A0001576267-MSS1.tiff GF1_PMS1_E72.6_N33.6_20160511_L1A0001576267-MSS1.xml GF1_PMS1_E72.6_N33.6_20160511_L1A0001576267-MSS1.rpb GF1_PMS1_E72.6_N33.6_20160511_L1A0001576267-MSS1.jpg 到numpy数组,所以我需要获取tiff的完整路径,但我使用tarfile package失败了。

下面是我尝试过的代码:

tiff

inpath = 'H:\\alongKKH IMAGES1\\' def ReadTars(inpath): tar_files = os.listdir(inpath) for tar in tar_files: if tar.split('_')[1] == 'PMS1': print tar tarname = tar tar = tarfile.open(os.path.join(inpath, tar), "r:gz") for file_name in tar.getnames(): if file_name[-4:]=='tiff': print file_name rasterpath = os.path.join(inpath, tarname + '\\' + file_name) array = raster2array(rasterpath) break else: tar = tarfile.open(os.path.join(inpath, tar), "r:gz") for file_name in tar.getnames(): if file_name[-4:]=='tiff': #array = raster2array(os.path.join(inpath, tar, file_name)) break 是将图像读取为numpy数组的函数。

raster2array

然后它的抛出错误如下:

def raster2array(rasterfn):
    raster = gdal.Open(rasterfn)
    array = raster.ReadAsArray()
    return array

谁能帮助我,我将感激不尽,谢谢。我使用python for windows。

2 个答案:

答案 0 :(得分:1)

(inpath,tarname +'\'+ file_name) - 只是一个路径,不是真正的文件,raster2array支持tar吗?如果不能,那么“文件系统中不存在”。

答案 1 :(得分:1)

tarfile没有read(),zipfile有它,所以:

import zipfile
file = zipfile.ZipFile(inpath+'GF1_PMS1_E72.zip', "r")
for name in file.namelist():               
    data = file.read(name)
    print name, len(data), repr(data[:10])

如果您搜索并获取tarfile的read(),如上所述。

“rasterfn”不是物理文件,然后发生了错误。  GDALOpen,支持VSI虚拟文件API的驱动程序,可以在.tar / .tar.gz / .tgz存档中打开文件(请参阅VSIInstallTarFileHandler()): VSIInstallTarFileHandler()