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

