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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 09:35:19