python - 从python中的zip文件深处提取文件
问题描述
我正在编写一个脚本,该脚本可以自动从我们从 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]
解决方案
我想到了:
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 文件复制到它。
推荐阅读
- amazon-web-services - 您如何在应用程序代码中引用动态 terraform 输出?
- reactjs - 为什么我会遇到这个 Basic Reactdom 渲染问题?
- oracle - Oracle apex 设置行创建用户名并在提交时创建日期时间
- google-bigquery - 如何切换回 BigQuery 功能预览?
- nosql - Oracle NoSQL 数据库 SQL 查询是否支持数组切片?
- python - 使用 Visual Studio 代码在 GPU 中运行 PyTorch
- xcode - 未定义符号:_OBJC_CLASS_$_RLMObjectBase Xcode 12.4
- reactjs - 如何通过 ReactJS 中的功能组件正确传递数据?
- boost - Boost Spirit 结构 boost::fusion::extension::adt_attribute_proxy 中没有类型名称“value_type”
- go - Unmarshal YAML 文件 - 如何读取带有前导零的 YAML 参数作为字符串?