Python代码print正常输出但f.writelines写入文件失效问题求助
问题原因及解决方法
你的代码写入文件无效的核心原因是文件未正确关闭或刷新缓冲区,Python文件操作默认使用缓冲模式,数据会暂存内存,直到缓冲区满或文件关闭才会写入磁盘。另外代码还有几个潜在问题,一并修正如下:
修正后的代码
import os # 使用原始字符串避免路径转义问题,或者用双反斜杠 base_path = r"Desktop\mama\qwe" s = os.listdir(base_path) # 用with语句自动管理文件,退出时自动刷新并关闭 with open("asd.txt", "w") as f: # 直接遍历列表元素,避免固定range导致索引越界 for item in s: try: wallet_path = os.path.join(base_path, item, "Wallets") wallets = os.listdir(wallet_path) print(wallets) # 写入目录名 f.write(f"{item}:\n") # 遍历钱包列表,逐个写入并换行 for wallet in wallets: f.write(f"{wallet}\n") # 空行分隔 f.write("\n\n") except OSError as e: # 捕获具体异常,避免隐藏其他错误 print(f"处理{item}时出错: {e}")
关键修复点
- 用
with语句管理文件:无需手动调用close(),确保文件操作完成后自动刷新缓冲区并关闭,这是Python处理文件的最佳实践。 - 修复路径转义:用原始字符串
r"路径"或双反斜杠\\,避免\q这类字符被解析为转义序列导致路径错误。 - 使用
os.path.join拼接路径:跨平台兼容,避免手动拼接路径时的格式错误。 - 替换
writelines为write(或优化writelines):writelines接收字符串列表时不会自动添加换行符,直接写入会导致内容挤在一起;改用write配合f-string更直观易读。 - 遍历列表元素而非固定索引:避免
range(0,100)超出列表长度引发的索引错误,同时代码更简洁。 - 捕获具体异常:替换空
except为OSError,只捕获文件操作相关错误,不会隐藏其他逻辑错误。
内容的提问来源于stack exchange,提问作者Flux So2
相关产品推荐
相关产品推荐

