从压缩包读取CSV写入NamedTemporaryFile后打印为空如何解决?
问题原因
- 核心错误为文件指针位置错位:执行
writelines写入内容完成后,文件指针处于文件末尾位置,此时直接遍历文件对象会从末尾开始读取,无内容返回,因此输出为空。 - 存在冗余操作:
NamedTemporaryFile实例化后本身就返回可直接读写的文件对象,不需要额外通过temp_file.name二次打开,二次打开还可能在Windows环境下触发文件占用权限错误。
修复后可运行代码
import zipfile from tempfile import NamedTemporaryFile with zipfile.ZipFile(file_name) as zip_fp: for item in zip_fp.namelist(): # 直接创建wb+模式的临时文件,自动管理生命周期 with NamedTemporaryFile(mode='wb+') as temp_fp: with zip_fp.open(item) as fp: temp_fp.writelines(fp.readlines()) # 写入完成后将指针移动到文件起始位置再读取 temp_fp.seek(0) for line in temp_fp: print(line)
如果需要读取为字符串格式而非字节,可将临时文件模式改为'r+',并指定对应编码参数,写入时将字节内容解码后写入即可。
内容的提问来源于stack exchange,提问作者mj8701
相关产品推荐
相关产品推荐

