mirror of
https://github.com/THU-MIG/yolov10.git
synced 2025-05-24 06:14:55 +08:00
Fix dataset multiple unzip behavior (#3413)
This commit is contained in:
parent
42057fdc95
commit
05760b04c4
@ -37,7 +37,7 @@ def is_url(url, check=True):
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
def unzip_file(file, path=None, exclude=('.DS_Store', '__MACOSX')):
|
def unzip_file(file, path=None, exclude=('.DS_Store', '__MACOSX'), exist_ok=False):
|
||||||
"""
|
"""
|
||||||
Unzips a *.zip file to the specified path, excluding files containing strings in the exclude list.
|
Unzips a *.zip file to the specified path, excluding files containing strings in the exclude list.
|
||||||
|
|
||||||
@ -49,6 +49,7 @@ def unzip_file(file, path=None, exclude=('.DS_Store', '__MACOSX')):
|
|||||||
file (str): The path to the zipfile to be extracted.
|
file (str): The path to the zipfile to be extracted.
|
||||||
path (str, optional): The path to extract the zipfile to. Defaults to None.
|
path (str, optional): The path to extract the zipfile to. Defaults to None.
|
||||||
exclude (tuple, optional): A tuple of filename strings to be excluded. Defaults to ('.DS_Store', '__MACOSX').
|
exclude (tuple, optional): A tuple of filename strings to be excluded. Defaults to ('.DS_Store', '__MACOSX').
|
||||||
|
exist_ok (bool, optional): Whether to overwrite existing contents if they exist. Defaults to False.
|
||||||
|
|
||||||
Raises:
|
Raises:
|
||||||
BadZipFile: If the provided file does not exist or is not a valid zipfile.
|
BadZipFile: If the provided file does not exist or is not a valid zipfile.
|
||||||
@ -61,6 +62,7 @@ def unzip_file(file, path=None, exclude=('.DS_Store', '__MACOSX')):
|
|||||||
if path is None:
|
if path is None:
|
||||||
path = Path(file).parent # default path
|
path = Path(file).parent # default path
|
||||||
|
|
||||||
|
# Unzip the file contents
|
||||||
with ZipFile(file) as zipObj:
|
with ZipFile(file) as zipObj:
|
||||||
file_list = [f for f in zipObj.namelist() if all(x not in f for x in exclude)]
|
file_list = [f for f in zipObj.namelist() if all(x not in f for x in exclude)]
|
||||||
top_level_dirs = {Path(f).parts[0] for f in file_list}
|
top_level_dirs = {Path(f).parts[0] for f in file_list}
|
||||||
@ -68,6 +70,13 @@ def unzip_file(file, path=None, exclude=('.DS_Store', '__MACOSX')):
|
|||||||
if len(top_level_dirs) > 1 or not file_list[0].endswith('/'):
|
if len(top_level_dirs) > 1 or not file_list[0].endswith('/'):
|
||||||
path = Path(path) / Path(file).stem # define new unzip directory
|
path = Path(path) / Path(file).stem # define new unzip directory
|
||||||
|
|
||||||
|
# Check if destination directory already exists and contains files
|
||||||
|
extract_path = Path(path) / list(top_level_dirs)[0]
|
||||||
|
if extract_path.exists() and any(extract_path.iterdir()) and not exist_ok:
|
||||||
|
# If it exists and is not empty, return the path without unzipping
|
||||||
|
LOGGER.info(f'Skipping {file} unzip (already unzipped)')
|
||||||
|
return path
|
||||||
|
|
||||||
for f in file_list:
|
for f in file_list:
|
||||||
zipObj.extract(f, path=path)
|
zipObj.extract(f, path=path)
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user