如何通过循环将zip内文件名写入txt?附not writable报错解决
问题根因
调用open()方法打开file.txt时未指定文件操作模式,Python默认使用只读模式'r'加载文件,该模式下无写入权限,因此触发'not writable'报错。遍历zip包内文件名的逻辑本身没有错误。
修复方案
将打开目标文本文件的代码调整为显式指定写入模式即可,修复后的基础可运行代码如下:
import zipfile # 指定写入模式'w',同时显式设置编码避免乱码 write_file = open('file.txt', 'w', encoding='utf-8') file_names = zipfile.ZipFile('FileTest.zip','r') for name in file_names.namelist(): # 每个文件名后增加换行符,避免所有文件名挤在同一行 write_file.write(f'{name}\n') file_names.close() write_file.close()
推荐优化写法
使用上下文管理器with处理文件IO操作,无需手动调用close()方法释放资源,避免资源泄漏问题:
import zipfile with open('file.txt', 'w', encoding='utf-8') as write_file, zipfile.ZipFile('FileTest.zip', 'r') as zip_f: for name in zip_f.namelist(): write_file.write(f'{name}\n')
常用文件打开模式说明
'r':默认只读模式,仅支持读取文件内容,不可写入'w':覆盖写入模式,文件不存在则自动创建,文件已存在则清空原有内容后写入新内容'a':追加写入模式,文件不存在则自动创建,文件已存在则在原有内容末尾追加新内容- 写入文本时建议显式传入
encoding='utf-8'参数,规避不同操作系统默认编码差异导致的乱码问题
内容的提问来源于stack exchange,提问作者Tan7
相关产品推荐
相关产品推荐

