为了账号安全,请及时绑定邮箱和手机立即绑定

在python中从zip文件深处提取文件

在python中从zip文件深处提取文件

慕的地8271018 2023-09-05 19:47:56
我正在编写一个脚本,可以自动从我们从 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 文件的文件结构。我只想要 .jp2 文件/Raw_data/os.path.basename(i)[:-4]
查看完整描述

1 回答

?
繁星点点滴滴

TA贡献1803条经验 获得超3个赞

我想到了:


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()

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


查看完整回答
反对 回复 2023-09-05
  • 1 回答
  • 0 关注
  • 186 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信