Python文件追加内容换行异常求助:forecast变量无法逐行写入
解决Python文件追加写入不换行问题
原始文件文本:
forecast= Mostly cloudy and cooler. Precipitation ending with in 6 hours. Windy with possible wind shift to the W NW or N.
运行代码时,已按句号将文本分割为forecast1至forecast5五个变量,print输出确认分割正常,但追加写入realtimegauges.txt时出现内容未换行的问题,导致forecast2、forecast3等内容连在一起,示例如下:
forecast1=Mostly cloudy and cooler. Precipitation ending with in 6 hours. Windy with possible wind shift to the W NW or N. forecast2=Mostly coudy and coolerfoecast3=precipitationending in 6 hours.
用户提供的代码:
# safely open the text file we created and search for a string with open("/home/admin/Documents/realtimegauges.txt",'r') as file: lines = file.readlines() for line in lines: if "forecast=" in line: str = (line) forecast1= (str.rsplit('=',1)[1]) forecast2= (forecast1.rsplit('.',5)[0]) try:forecast3= (forecast1.rsplit('.',5)[1]) except IndexError: forecast3 = ('') try:forecast4= (forecast1.rsplit('.',5)[2]) except IndexError: forecast4 = ('') try:forecast5= (forecast1.rsplit('.',5)[3]) except IndexError: forecast5 = ('') print (forecast1) with open("/home/admin/Documents/realtimegauges.txt",'a') as f: f.write('forecast1=' + forecast1) print (forecast2) with open("/home/admin/Documents/realtimegauges.txt",'a') as f: f.write('forecast2=' + forecast2) print (forecast3) with open("/home/admin/Documents/realtimegauges.txt",'a') as f: f.write('forecast3=' + forecast3) f.close() print (forecast4) print (forecast5) #with open("/home/admin/Documents/realtimegauges.txt",'a') as f: # f.write('forecast1=' + forecast1) # f.close() #with open("/home/admin/Documents/realtimegauges.txt",'a') as f: # f.write('forecast2=' + forecast2) # f.close() #with open("/home/admin/Documents/realtimegauges.txt",'a') as f: # f.write('forecast3=' + forecast3) # f.close() #with open("/home/admin/Documents/realtimegauges.txt",'a') as f: # f.write('forecast4=' + forecast4) #with open("/home/admin/Documents/realtimegauges.txt",'a') as f: # f.write('forecast5=' + forecast5)
解决方法
问题核心是写入文件时未添加换行符,导致内容连续拼接。同时可优化文件操作逻辑,减少重复打开关闭文件的开销。
修改后的代码
# 读取文件并提取目标行 with open("/home/admin/Documents/realtimegauges.txt",'r') as file: target_line = "" for line in file.readlines(): if "forecast=" in line: target_line = line break # 找到目标行后终止循环,提升效率 # 分割forecast内容并处理 forecast_content = target_line.rsplit('=', 1)[1].strip() # 去除首尾空白字符 segments = forecast_content.split('.') # 过滤空片段并去除每个片段的首尾空白 valid_segments = [s.strip() for s in segments if s.strip()] # 准备要写入的行 write_lines = [] write_lines.append(f"forecast1={forecast_content}\n") # 生成forecast2到forecast5的内容 for idx in range(len(valid_segments)): forecast_num = idx + 2 if forecast_num > 5: break write_lines.append(f"forecast{forecast_num}={valid_segments[idx]}.\n") # 补回句号 # 一次性完成所有追加写入 with open("/home/admin/Documents/realtimegauges.txt",'a') as f: f.writelines(write_lines) # 打印验证结果 print("forecast1:", forecast_content) for idx, seg in enumerate(valid_segments, start=2): if idx > 5: break print(f"forecast{idx}:", seg + '.')
关键修改点
- 添加换行符:在每一行写入内容末尾添加
\n,强制实现换行 - 优化文件操作:仅打开一次文件完成所有追加写入,减少IO操作次数
- 内容处理优化:用
split('.')更直观分割句子,过滤空片段并补回句号,保证内容完整性 - 代码简洁性:使用f-string格式化字符串,提升代码可读性
内容的提问来源于stack exchange,提问作者BobW
相关产品推荐
相关产品推荐

