Python读取频繁写入文件并按行计算后写入新行的实现问题咨询
结论
你提供的原始代码不能实现需求,存在多处语法和逻辑错误。
原始代码存在的问题
- 写入操作语法错误:
write.logfile ("5*2+1\n")是完全错误的写法,正确的文件写入方法是文件对象.write(内容) - follow生成器的逻辑是从文件末尾开始监听新写入的行,不会读取文件已有的历史行,无法拿到你需要的第n行原有内容
- 没有实现读取行内容做数学运算的逻辑,硬编码了固定字符串
r+模式下写入内容时指针位置没处理,会出现覆盖原有内容或者写入位置不对的问题- 没有做异常处理,比如行内容不是合法数字的场景
正确实现代码
版本1:自动逐行运算循环写入(程序自主循环生成所有行)
适合不需要外部写入内容,程序自己从初始值开始逐行运算追加的场景:
import time def calc_and_append(file_path): while True: # 每次循环重新读取文件,避免指针混乱 with open(file_path, 'r', encoding='utf-8') as f: lines = [line.strip() for line in f.readlines() if line.strip()] # 文件为空的话先初始化第一行,可根据需求调整初始值 if not lines: with open(file_path, 'a', encoding='utf-8') as f: f.write('1\n') time.sleep(0.1) continue # 取最后一行(第n行)做运算,运算规则可自行修改 last_num = int(lines[-1]) calc_result = last_num * 2 + 1 # 追加写入第n+1行 with open(file_path, 'a', encoding='utf-8') as f: f.write(f'{calc_result}\n') # 控制循环速度,避免写入太快 time.sleep(0.1) if __name__ == '__main__': calc_and_append("myfile.txt")
版本2:监听外部写入的新行后运算追加
适合需要外部往文件写入内容,程序监听到新行后自动运算追加的场景:
import time def follow(thefile): thefile.seek(0, 2) while True: line = thefile.readline() if not line: time.sleep(0.1) continue yield line.strip() if __name__ == '__main__': # 分开读写句柄,避免文件指针冲突 read_fp = open("myfile.txt", "r", encoding="utf-8") write_fp = open("myfile.txt", "a", encoding="utf-8") loglines = follow(read_fp) for line in loglines: try: num = int(line) # 运算规则可自行修改 res = num * 2 + 1 write_fp.write(f"{res}\n") write_fp.flush() # 立即刷新缓冲区,确保内容写入磁盘 except ValueError: # 行内容不是合法数字的情况可自行补充处理逻辑 pass
内容的提问来源于stack exchange,提问作者dease
相关产品推荐
相关产品推荐

