0

我正在使用一个文本文件来存储我正在制作的神经网络的权重,但是我在编辑存储在这个文本字段中的权重时遇到了严重的问题。本质上,我正在制作一个非常常规格式的文件: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))

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

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

但是由于某种原因,这个函数只是在文件中的某个点中断。前 80% 传输正常,但随后它在一行中间看似随机的点切断文件。有任何想法吗?我知道还有其他关于类似主题的问题,但它们似乎都不适用于我的情况,而且我找不到像我遇到的那样的另一个错误。

问题是可导航的,但我的主要兴趣是这个错误的根源是什么。我从来没有见过这样的东西,这让我很感兴趣,因为我不知道发生了什么,希望这里有人能有更多的想法。

4

4 回答 4

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 自动关闭打开的文件

于 2012-06-04T18:57:01.823 回答
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 语句

于 2012-06-04T18:51:52.720 回答
0

或者,您可以使用 shelve 之类的东西为您处理这个问题。

于 2012-06-04T19:02:34.900 回答
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()
于 2012-06-04T19:24:17.057 回答