我正在使用文本文件来存储我正在制作的神经网络的权重,但是我在编辑存储在此文本字段中的权重时遇到了严重的问题。基本上,我正在制作一个非常规则格式的文件: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%传输正常,但随后它会在一行中间看似随机的点处切断文件。有任何想法吗?我知道还有其他类似主题的问题,但它们似乎都不适用于我的情况,我找不到任何其他错误,比如我得到的错误。
问题是可导航的,但我的主要兴趣在于此错误的起源是什么。我从来没有见过这样的东西,它引起了我的兴趣,因为我不知道发生了什么,希望这里有人会有更多的想法。
答案 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()