如何修复Python中Codeheroback输入数字被转为字母的文本文件错误
问题分析
你的代码出现输入数字变成字母的原因是:替换字符串中的\\1在格式化后会变成\1,当输入503时,\1与503拼接成\1503,其中\150是八进制转义字符(对应ASCII码的h),剩下的3保留,最终导致value的值变成h3。
同时原代码使用r+模式打开文件,会在原有文件内容后追加内容,而非覆盖,这可能也是潜在问题。
修复方案
方案1:直接字符串替换(最简洁,适配当前场景)
因为你的目标模板中value本身是空值,没必要用正则,直接字符串替换更高效:
codeheroback = input('Nhập Code Tướng:') # input返回的本身就是字符串,无需额外转str checkskinid = '''<int name="heroId" value="" refParamName="" useRefParam="false"/>''' # 替换空的value部分为输入的内容 result = checkskinid.replace('value=""', f'value="{codeheroback}"') # 使用w模式覆盖写入文件,避免追加原有内容 with open('back.xml', 'w', encoding='utf-8') as fileback: fileback.write(result)
方案2:正则替换(适配更复杂场景,比如原value可能有值)
如果需要用正则处理更灵活的情况,改用\g<1>引用分组(避免八进制转义问题),或者调整分组逻辑直接替换value内容:
import re codeheroback = input('Nhập Code Tướng:') checkskinid = '''<int name="heroId" value="" refParamName="" useRefParam="false"/>''' # 调整正则替换逻辑,直接替换value内的内容为输入值 result = re.sub( r'(name="heroId" value=").*?(" refParamName)', r'\1{}\2'.format(codeheroback), checkskinid ) with open('back.xml', 'w', encoding='utf-8') as fileback: fileback.write(result)
内容的提问来源于stack exchange,提问作者Khánh Đàm
相关产品推荐
相关产品推荐

