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

Python写入文件无法新增换行、每次仅修改首行问题求助

问题原因
  • 文件打开模式使用错误:你代码中使用open('logs.txt', 'w')打开文件时,'w'代表覆盖写入模式,该模式下每次打开文件会先清空文件内所有原有内容,再写入新内容,因此每次运行程序后logs.txt只会保留本次写入的一行内容。
  • 去重逻辑失效:你定义的taken = []列表仅存在于单次程序运行的内存中,每次重启程序时该列表都会被重新初始化为空,即使之前生成过重复的文件名,本次运行也无法检测到,去重逻辑完全不生效。
  • 额外问题:原代码未导入random模块,直接调用random.choice会直接报错。
修复方案
  1. 将文件打开模式替换为追加模式'a',该模式会直接在文件末尾新增写入内容,不会清空原有内容。
  2. 程序启动时先读取logs.txt中已保存的所有文件名存入taken列表,实现跨运行的文件名去重。
  3. 补充random模块导入逻辑。

修正后的参考代码如下:

import random

use = input('')
if use == '2':
    # 初始化时读取已有日志文件内容实现去重
    taken = []
    try:
        with open('logs.txt', 'r') as f:
            taken = [line.strip() for line in f.readlines()]
    except FileNotFoundError:
        # 文件不存在时默认是空列表
        pass
    
    names = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0']
    file_name = ''.join([random.choice(names) for _ in range(4)])
    
    if file_name in taken:
        print('An error occurred, please try again!')
    else:
        # 使用追加模式'a'写入新行
        with open('logs.txt', 'a') as f:
            f.write(file_name + '\n')
        print('Done')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 17:15:00