You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用Python读写文本文件时文件内容丢失的原因排查

为什么执行这段Python代码后目标文件内容会丢失?

这事儿的核心原因其实很直接:你用"w"(写入)模式打开文件的那一刻,系统就已经把这个文件的原有内容彻底清空了,不管你之后有没有往里面写东西。

咱们来拆解下你的代码里的问题:

  • 你同时打开了同一个文件:一个用"r"模式读,另一个用"w"模式写。当exportFile = open(..., "w")这行代码执行时,操作系统会立即清空6.txt的所有内容。这时候inputFile虽然是读模式,但文件已经是空的了,后续循环自然读不到任何原内容,最后写入的也只能是空(或者错误处理后的无效内容),看起来就像是原内容凭空消失了。
  • 另外你的代码里还有几个语法错误,比如list(line, sep='\t')是错的,应该用line.split('\t')来分割制表符;而且分割出来的s里的元素都是字符串,你直接做s[1] < 0或者s[0] *= 0.01会报错,得先转成数值类型处理,之后再转回字符串才能拼接写入。

怎么修正这个问题?

最稳妥的方式是先把文件内容全部读入内存,关闭文件后再打开写入模式处理,比如:

# 先读入内容
with open('/content/gdrive/My Drive/dihedral/6.txt', "r") as inputFile:
    lines = inputFile.readlines()

# 处理内容
processed_lines = []
for line in lines:
    # 正确分割制表符,同时去除换行符避免干扰
    s = line.strip().split('\t')
    try:
        # 转成数值类型处理逻辑
        val1 = float(s[1])
        if val1 < 0:
            val1 += 360
        val0 = float(s[0]) * 0.01
        # 转回字符串并重新拼接成行
        new_line = '\t'.join([str(val0), str(val1)]) + '\n'
        processed_lines.append(new_line)
    except (IndexError, ValueError):
        # 遇到格式错误的行,直接保留原内容避免丢失
        processed_lines.append(line)

# 写入处理后的内容
with open('/content/gdrive/My Drive/dihedral/6.txt', "w") as exportFile:
    exportFile.writelines(processed_lines)

with语句还能自动帮你关闭文件,避免手动关闭遗漏的问题。

另外,也可以先写到一个临时文件里,确认处理没问题后再替换原文件,这样更安全,能避免处理过程中出错导致原文件损坏。

内容的提问来源于stack exchange,提问作者Joe

火山引擎 最新活动