You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将.TXT文件转为ZipInfo格式并加入archive.infolist()列表?

解决方案:将本地TXT文件转为ZipInfo后加入列表

完全可行,你的猜想是对的——必须把本地TXT文件转换成ZipInfo对象,才能和archive.infolist()返回的列表元素保持类型一致,进而添加到列表中。

具体实现步骤

  1. 创建本地TXT对应的ZipInfo对象
    利用zipfile.ZipInfo构造函数生成对象,同时填充必要的文件属性(比如文件名、修改时间、大小等),示例函数如下:

    import zipfile
    import os
    from datetime import datetime
    
    def txt_to_zipinfo(txt_path):
        # 基于文件名创建ZipInfo实例
        zip_info = zipfile.ZipInfo(os.path.basename(txt_path))
        # 同步本地文件的修改时间
        mtime = os.path.getmtime(txt_path)
        zip_info.date_time = datetime.fromtimestamp(mtime).timetuple()[:6]
        # 设置原始文件大小
        zip_info.file_size = os.path.getsize(txt_path)
        # 可选:指定压缩类型(后续若需压缩可用)
        zip_info.compress_type = zipfile.ZIP_DEFLATED
        # 设置文件属性(匹配示例中的external_attr=0x20)
        zip_info.external_attr = 0o644 << 16
        return zip_info
    
  2. 整合到现有代码逻辑中
    遍历input_files时区分文件类型:ZIP文件读取内部的ZipInfo列表,本地TXT转成ZipInfo后追加进去,示例代码如下:

    import zipfile
    import os
    from datetime import datetime
    
    input_files = ["file1.txt", "file2.txt", "target.zip"]
    archive_class = zipfile.ZipFile
    
    # 初始化统一的ZipInfo列表
    all_zipinfos = []
    
    for file_path in input_files:
        if file_path.endswith('.zip'):
            # 读取ZIP内的ZipInfo并加入列表
            with archive_class(file_path, 'r') as archive:
                all_zipinfos.extend(archive.infolist())
        elif file_path.endswith('.txt'):
            # 转换本地TXT为ZipInfo后加入列表
            zip_info = zipfile.ZipInfo(os.path.basename(file_path))
            zip_info.date_time = datetime.fromtimestamp(os.path.getmtime(file_path)).timetuple()[:6]
            zip_info.file_size = os.path.getsize(file_path)
            zip_info.compress_type = zipfile.ZIP_DEFLATED
            zip_info.external_attr = 0o644 << 16
            all_zipinfos.append(zip_info)
    
    # 此时all_zipinfos包含了所有目标文件的ZipInfo对象
    print(all_zipinfos)
    

注意事项

  • 如果不需要对本地TXT进行后续压缩操作,可以省略compress_type的设置,compress_size也可留空或与file_size保持一致。
  • external_attr的取值可根据实际文件权限调整,0o644<<16是普通文件的通用设置,与你示例中的external_attr=0x20属性匹配。

内容的提问来源于stack exchange,提问作者ifrj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 06:55:31