Python代码打印预期修改但未写入目标txt文件问题求助
问题
执行Python代码修改txt文件内容时,控制台输出显示修改结果符合预期,但目标文件03.33552_R00.txt没有任何变化。
原代码
inputFile = open(r'C:\Users\nigel\OneDrive\Documents\LAB\lean\03.33552_R00.txt', 'r') lines = inputFile.readlines() inputFile.close() exportFile = open(r'C:\Users\nigel\OneDrive\Documents\LAB\lean\03.33552_R00.txt', 'w') list_a=[] list_b=[] for line in lines: if 'PVObject_=pvSubArray' in line: list_a.append(len(list_a)+1) if 'PVObject_IAM=pvIAM' in line: list_b.append(len(list_b)+1) list_a = [str(x) for x in list_a] list_b = [str(x) for x in list_b] print(list_a) print(list_b) control_a=0 control_b=0 for line in lines: if 'PVObject' in line: if 'PVObject_=pvSubArray' in line: new_value_a = list_a[control_a] control_a+=1 line = line.replace('=', new_value_a) line = line.strip() print(line) elif 'PVObject_IAM=pvIAM' in line: new_value_b = list_b[control_b] control_b+=1 line = line.replace('=', new_value_b) line = line.strip() print(line) else: line = line.replace('=', '') line = line.strip() print(line) exportFile.writelines(lines[0:]) exportFile.close()
执行输出
['1', '2', '3', '4'] ['1', '2', '3', '4'] PVObject_SiteSimulpvSite PVObject_MeteoSimulpvMeteo PVObject_SiteMetpvSite PVObject_EnIncidentepvEnIncid PVObject_PlanCapteurspvCollPlane PVObject_PVMainArraypvMainArray PVObject_1pvSubArray PVObject_IAM1pvIAM PVObject_2pvSubArray PVObject_IAM2pvIAM PVObject_3pvSubArray PVObject_IAM3pvIAM PVObject_4pvSubArray PVObject_IAM4pvIAM PVObject_SystempvSystem PVObject_OmbragepvShading PVObject_1pvShdArrayTable PVObject_2pvShdArrayTable PVObject_3pvShdGenObject PVObject_4pvShdGenObject PVObject_5pvShdGenObject PVObject_6pvShdGenObject PVObject_pvShdObjectGroup PVObject_TableOmbrLin#1pvShdFTable PVObject_ModuleLayoutpvModuleLayout SubFields,listof2PVObjects PVObject_1pvSubField PVObject_2pvSubField PVObject_pvSimulPlot PVObject_pvSimulPlot PVObject_pvSimulPlot PVObject_pvSimulPlot PVObject_pvSimulPlot PVObject_pvSimulPlot PVObject_pvSimulPlot PVObject_pvSimulPlot PVObject_pvSimulPlot PVObject_pvSimulPlot PVObject_pvSimulPlot PVObject_pvSimulPlot PVObject_pvSimulPlot PVObject_pvSimulPlot
问题原因
循环中修改的是临时变量line,并没有将修改后的内容更新到原lines列表中。最后写入文件的还是原始的lines列表,因此文件内容无变化。
修正方案
方式1:创建新列表存储修改后的行
inputFile = open(r'C:\Users\nigel\OneDrive\Documents\LAB\lean\03.33552_R00.txt', 'r') lines = inputFile.readlines() inputFile.close() list_a=[] list_b=[] for line in lines: if 'PVObject_=pvSubArray' in line: list_a.append(len(list_a)+1) if 'PVObject_IAM=pvIAM' in line: list_b.append(len(list_b)+1) list_a = [str(x) for x in list_a] list_b = [str(x) for x in list_b] print(list_a) print(list_b) control_a=0 control_b=0 modified_lines = [] # 新增存储修改后行的列表 for line in lines: if 'PVObject' in line: if 'PVObject_=pvSubArray' in line: new_value_a = list_a[control_a] control_a+=1 line = line.replace('=', new_value_a).strip() + '\n' # 加回换行符避免内容拥挤 print(line) elif 'PVObject_IAM=pvIAM' in line: new_value_b = list_b[control_b] control_b+=1 line = line.replace('=', new_value_b).strip() + '\n' print(line) else: line = line.replace('=', '').strip() + '\n' print(line) modified_lines.append(line) # 将修改后的行加入新列表 exportFile = open(r'C:\Users\nigel\OneDrive\Documents\LAB\lean\03.33552_R00.txt', 'w') exportFile.writelines(modified_lines) exportFile.close()
方式2:通过索引更新原列表
inputFile = open(r'C:\Users\nigel\OneDrive\Documents\LAB\lean\03.33552_R00.txt', 'r') lines = inputFile.readlines() inputFile.close() list_a=[] list_b=[] for line in lines: if 'PVObject_=pvSubArray' in line: list_a.append(len(list_a)+1) if 'PVObject_IAM=pvIAM' in line: list_b.append(len(list_b)+1) list_a = [str(x) for x in list_a] list_b = [str(x) for x in list_b] print(list_a) print(list_b) control_a=0 control_b=0 for idx, line in enumerate(lines): # 使用enumerate获取行索引 if 'PVObject' in line: if 'PVObject_=pvSubArray' in line: new_value_a = list_a[control_a] control_a+=1 modified_line = line.replace('=', new_value_a).strip() + '\n' lines[idx] = modified_line # 通过索引更新原列表 print(modified_line) elif 'PVObject_IAM=pvIAM' in line: new_value_b = list_b[control_b] control_b+=1 modified_line = line.replace('=', new_value_b).strip() + '\n' lines[idx] = modified_line print(modified_line) else: modified_line = line.replace('=', '').strip() + '\n' lines[idx] = modified_line print(modified_line) exportFile = open(r'C:\Users\nigel\OneDrive\Documents\LAB\lean\03.33552_R00.txt', 'w') exportFile.writelines(lines) exportFile.close()
额外优化建议
使用with语句自动管理文件资源,避免手动关闭文件时出现异常:
with open(r'C:\Users\nigel\OneDrive\Documents\LAB\lean\03.33552_R00.txt', 'r') as inputFile: lines = inputFile.readlines() # ... 中间处理逻辑 ... with open(r'C:\Users\nigel\OneDrive\Documents\LAB\lean\03.33552_R00.txt', 'w') as exportFile: exportFile.writelines(modified_lines)
内容的提问来源于stack exchange,提问作者NigelBlainey
相关产品推荐
相关产品推荐

