Python中文本文件编辑的奇怪错误

时间:2012-06-04 18:49:09

标签: python text file-io

我正在使用文本文件来存储我正在制作的神经网络的权重,但是我在编辑存储在此文本字段中的权重时遇到了严重的问题。基本上,我正在制作一个非常规则格式的文件:Word + \ t + Weight + \ n,然后我使用以下代码来运行这个文本文件并获取部分:

with open(Neuron_File, 'r+') as Original_Neurons:
            for Neuron in Original_Neurons:
                Word_Stem = re.sub(r'^([a-z-]*)([\t]?)([0-9.]*)(\n)$', r'\1', Neuron)
                Weight = float(re.sub(r'^([a-z-]*)([\t]?)([0-9.]*)(\n)$', r'\3', Neuron))

哪个有效,但我希望能够更改Weight的值,并将其写回到同一位置的同一文本文件中。我已成功创建了一个以我想要的方式修改的新文件,但是我将它写回原始文件时遇到了一个奇怪的问题。我正在使用以下代码:

def Replace(New_File, Old_File):
    for line in open(New_File):
        open(Old_File, 'w').write(str(line))

但由于某种原因,此功能只是在文件中的某个点处中断。前80%传输正常,但随后它会在一行中间看似随机的点处切断文件。有任何想法吗?我知道还有其他类似主题的问题,但它们似乎都不适用于我的情况,我找不到任何其他错误,比如我得到的错误。

问题是可导航的,但我的主要兴趣在于此错误的起源是什么。我从来没有见过这样的东西,它引起了我的兴趣,因为我不知道发生了什么,希望这里有人会有更多的想法。

4 个答案:

答案 0 :(得分:1)

with open('input.txt') as in_file:
    with open('output.txt', 'w') as out_file:
        for line in in_file.readlines():
            word, weight = line.split()[:2]
            out_file.write('%s\t%s' % (word, float(weight) * 2))

with-block会自动关闭已打开的文件

答案 1 :(得分:0)

您需要关闭正在编写的文件的文件句柄。

def Replace(New_File, Old_File):
    Old_File_Handle = open(Old_File, 'w')
    for line in open(New_File):
        Old_File_Handle.write(str(line))
    Old_File_Handle.close()

或者,使用with statement

答案 2 :(得分:0)

或者,您可以使用类似shelve的内容为您处理此问题。

答案 3 :(得分:0)

def Replace(New_File, Old_File):
    for line in open(New_File):
        # next line REWRITES outfile EVERY TIME!!!
        open(Old_File, 'w').write(str(line))

结果:Old_File仅包含最后line

正确实施:

def Replace(New_File, Old_File):
    # open files
    inp = open(New_File)
    out = open(Old_File, 'w')
    for line in inp:
        out.write(line)
    # close files
    out.close()
    inp.close()