打包后压缩包内的文件变成乱码可能是因为使用了不同的编码方式导致,可以尝试在命令行中添加'-encoding'参数指定编码方式,如:

import os
import subprocess
from alive_progress import alive_bar, config_handler


def pack_files(source_dir, output_dir):
    # 检查源目录和输出目录是否存在
    if not os.path.exists(source_dir) or not os.path.isdir(source_dir):
        print(f'源目录{source_dir}不存在或不是一个目录')
        return

    if not os.path.exists(output_dir) or not os.path.isdir(output_dir):
        print(f'输出目录{output_dir}不存在或不是一个目录')
        return

    # 计算文件总数
    total_files = sum([len(files) for root, dirs, files in os.walk(source_dir)])

    # 设置进度条样式
    config_handler.set_global(length=40, spinner='classic', bar='classic', enrich_print=True)

    with alive_bar(total_files, title='压缩进度') as bar:
        for root, dirs, files in os.walk(source_dir):
            for file in files:
                # 获取需要压缩的文件路径
                file_path = os.path.join(root, file)

                # 获取文件名和文件后缀
                file_name, file_ext = os.path.splitext(file)

                # 拼接输出文件路径(去掉文件后缀)
                output_file = os.path.join(output_dir, f'{file_name}.gz')

                if os.path.isdir(file_path):
                    # 处理文件夹,使用tar命令打包并压缩成tar.gz格式
                    tar_file = os.path.join(output_dir, f'{file_name}.tar.gz')
                    subprocess.run(['tar', '-czf', tar_file, file_path])
                else:
                    # 处理文件,使用pigz进行压缩
                    subprocess.run(['pigz', '-c', file_path, '-encoding', 'utf-8'],
                                   stdout=open(output_file, 'wb'))
                # 更新进度条
                bar()

# 路径
source_dir = '/home/115/up'
output_dir = '/home/115/app'
pack_files(source_dir, output_dir)

通过添加 -encoding utf-8 参数,可以指定压缩文件使用 UTF-8 编码,从而避免乱码问题。如果您的文件使用其他编码格式,请将 utf-8 替换为相应的编码格式。

打包压缩文件乱码解决方法:指定编码格式

原文地址: https://www.cveoy.top/t/topic/nDfF 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录