从 python 中的 zip 文件深处提取文件
Extracting files from deep within a zip file in python
我正在编写一个脚本,可以自动从我们从 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 文件
我想通了:
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()
我必须在该位置创建一个新文件,然后将 zip 文件中的 jp2 文件复制到其中。
我正在编写一个脚本,可以自动从我们从 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]
我想通了:
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()
我必须在该位置创建一个新文件,然后将 zip 文件中的 jp2 文件复制到其中。