【问题标题】:Trying to update text file records in place and write them out to an output file尝试更新文本文件记录并将它们写入输出文件
【发布时间】:2020-11-07 19:10:59
【问题描述】:

我读取了一个输入文件,并尝试通过将日期中的一位数“日”值替换为两位数“日”值来重新格式化未完全形成的日期字段。起初似乎运行良好,然后我注意到输入文件有(279)条记录,但输出是用(615)条记录写入的。许多(如果不是全部)个位数的日期值已按预期替换,但这些记录的原始版本似乎也已写入输出。当然期望输出也有(239)条记录??? (脚本运行时不会抛出任何错误)。

replacements = {'/1':'/01', '9/':'09/', '7/':'07/'}
file2 = open(r"c:\users\liddvdp\desktop\IBC CAP OUT.txt", "w")
with open(r"c:\users\liddvdp\desktop\IBC CAP.txt", "r") as reader:
         for line in reader:
             for src, target in replacements.items():
                 line = line.replace(src, target)
                 file2.write(line)

【问题讨论】:

  • 建议添加一些数据示例

标签: python file text


【解决方案1】:

你应该写:

replacements = {'/1':'/01', '9/':'09/', '7/':'07/'}
file2 = open(r"c:\users\liddvdp\desktop\IBC CAP OUT.txt", "w")
with open(r"c:\users\liddvdp\desktop\IBC CAP.txt", "r") as reader:
    for line in reader:
        for src, target in replacements.items():
            line = line.replace(src, target)
        file2.write(line)

否则,您将每行编辑 3 次,并在输出文件中写入 3 次。

【讨论】:

  • 我无法检测到建议的修复和原始版本之间的差异??
  • 最后一行 "files.write(line)" 不应该在内部 for 循环中。它应该在外部 for 循环中。当行在内部for循环中时,它会在输出文件中多次写入同一行。
  • 我现在明白了这一点。我更改了缩进,以便写入将在外循环中并得到很大改进的结果,日期“值字符串”都很好....但最奇怪的是,输入文件有(239)记录输出只写(205) 即使它们看起来不错。
  • So-o-o 由于某种原因,读取输入文件的整个循环在记录 205 处停止,不再处理任何记录,最后 34 个未处理。
  • 我会包含输入文件,因为它很小但确实有办法做到这一点......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-20
相关资源
最近更新 更多