def extract_zip_recursive(zip_file, target_folder):
# 解压缩当前的zip文件到目标文件夹
with zipfile.ZipFile(zip_file, 'r') as zf:
for member in zf.infolist():
filename = decode_filename(member)
# 构建文件的完整路径
file_path = os.path.join(target_folder, filename)
if member.is_dir():
os.makedirs(file_path, exist_ok=True)
else:
os.makedirs(os.path.dirname(file_path), exist_ok=True)
with zf.open(member) as source, open(file_path, "wb") as target:
shutil.copyfileobj(source, target)
# 删除已解压的zip文件
os.remove(zip_file)
# 记录日志:解压完成
logging.info(f'Finished extracting {zip_file}')
# 检查解压后的文件中是否还有压缩包
for root, _, files in os.walk(target_folder):
for file in files:
if file.endswith('.zip'):
nested_zip_file = os.path.join(root, file)
# 记录日志:开始解压嵌套的zip文件
logging.info(f'Starting to extract nested zip {nested_zip_file}')
# 构造解压目标文件夹路径,去除.zip后缀作为目标文件夹路径
nested_target_folder = os.path.splitext(nested_zip_file)[0]
# 递归解压嵌套的zip文件
extract_zip_recursive(nested_zip_file, nested_target_folder)
def unzip_all(zip_folder):
# 获取文件夹中所有的文件和子文件夹
for root, _, files in os.walk(zip_folder):
for file in files:
if file.endswith('.zip'):
zip_file = os.path.join(root, file)
# 记录日志:开始解压文件
logging.info(f'Starting to extract {zip_file}')
# 构造解压目标文件夹路径,去除.zip后缀作为目标文件夹路径
target_folder = os.path.splitext(zip_file)[0]
# 解压当前的zip文件到目标文件夹
extract_zip_recursive(zip_file, target_folder)
def print_file_paths(target_folder):
tmp = 1
# 遍历目标文件夹及其子文件夹中的所有文件
for root, folders, files in os.walk(target_folder):
for file_name in files:
# 打印文件的完整路径
file_path = os.path.join(root, file_name)
# 创建新的子文件夹名称
new_folder_name = str(tmp)
tmp += 1
new_folder_path = os.path.join('new', new_folder_name)
new_folder_path = os.path.join(target_folder, new_folder_path)
# 创建新的子文件夹
os.makedirs(new_folder_path, exist_ok=True)
shutil.move(file_path, new_folder_path)
print(file_path)
def read_file(dir_path):
# 获取文件夹中所有的文件和子文件夹
for root, _, filenames in os.walk(dir_path):
for filename in filenames:
file_path = os.path.join(root, filename)
a = read_files2.read_mdb_win(file_path)
print(file_path)
# 示例用法:解压当前目录下所有zip文件,并删除已解压的zip文件
if __name__ == "__main__":
current_directory = r'C:\Users\Administrator\Desktop\1'
unzip_all(current_directory)
print_file_paths(current_directory)
python 解压文件(保持文件目录不变,解决路径乱码)
最新推荐文章于 2024-11-23 12:51:02 发布
3675

被折叠的 条评论
为什么被折叠?



