从python的zip文件中的深层提取文件

时间:2020-09-25 16:29:03

标签: python zip unzip

我正在研究一个脚本,该脚本可以自动从Sentinel 2B卫星获取的zip文件中提取数据。

我需要从zip文件中获取的文件的路径如下: zipfile.zip/somefolder.SAFE/GRANULE/main_folder/IMG_DATA/

它们都是.jp2文件,我需要将它们提取到具有以下结构的另一个路径: my_path/main_folder/

我需要保留zip文件中的这个main_folder名称(随文件而异)。

Ziplist是zip文件路径的列表

for i in zipList:
    if not os.path.exists(basePath + '/Raw_data/' + os.path.basename(i)[:-4]):
        os.makedirs(basePath + '/Raw_data/' + os.path.basename(i)[:-4])

    zipped_file = zipfile.ZipFile(i, 'r')
    for file in zipped_file.namelist():
        if fnmatch.fnmatch(file, "*.jp2"):
            zipped_file.extract(file, basePath + '/Raw_data/' + os.path.basename(i)[:-4])

但是,这维护了zip文件的文件结构。 我只需要/Raw_data/os.path.basename(i)[:-4]

中的.jp2文件

1 个答案:

答案 0 :(得分:0)

我知道了:

for i in zipList:
    folder_path = basePath + '/Raw_data/' + os.path.basename(i)[:-4]
    if not os.path.exists(folder_path):
        os.makedirs(folder_path)
    # print(os.path.basename(i))
    z = zipfile.ZipFile(i, 'r')
    for file in z.namelist():
        if fnmatch.fnmatch(file, "*.jp2") and str(file)[-8:-4] in ["_B02", "_B03", "_B04", "_B08"]:
            target = open(folder_path + '/' + os.path.basename(file), 'wb')
            target.write(z.read(file))
            target.close()
    z.close()

我必须在该位置创建一个新文件,然后将zip2文件从zip文件复制到其中。