我目前处于关于python和阅读文件的问题上。我必须在while循环中打开一个文件,然后用文件的值做一些事情。结果将写入新文件。然后在下一次运行while循环时读取这个新文件。但是在第二次运行中,我没有从这个文件中获取任何值...这是一个代码片段,希望澄清我的意思。
while convergence == 0:
run += 1
prevrun = run-1
if os.path.isfile("./Output/temp/EmissionMat%d.txt" %prevrun) == True:
matfile = open("./Output/temp/EmissionMat%d.txt" %prevrun, "r")
EmissionMat = Aux_Functions.EmissionMat(matfile)
matfile.close()
else:
matfile = open("./Input/EmissionMat.txt", "r")
EmissionMat = Aux_Functions.EmissionMat(matfile)
matfile.close()
# now some valid operations, which produce a matrix
emissionmat_file = open("./output/temp/EmissionMat%d.txt" %run, "w")
emissionmat_file.flush()
emissionmat_file.write(str(matrix))
emissionmat_file.close()
解决了!
matfile.seek(0)
这会将指针重置为文件的开头,并允许我在下次运行时正确读取该文件。
答案 0 :(得分:1)
为什么要写入文件然后阅读?此外,你使用同花顺,所以你做的可能很长。我会做的
with open(originalpath) as f:
mat = f.read()
while condition :
run += 1
write_mat_run(mat, run)
mat = func(mat)
write_mat_run可以在另一个线程中完成。你应该检查io例外情况。
顺便说一句,这可能会解决你的错误,或至少说清楚。
答案 1 :(得分:0)
我看到您的代码没有任何问题。以下具体示例适用于我的Linux机器:
import os
run = 0
while run < 10:
run += 1
prevrun = run-1
if os.path.isfile("output%d.txt" %prevrun):
matfile = open("output%d.txt" %prevrun, "r")
data = matfile.readlines()
matfile.close()
else:
matfile = open("input.txt", "r")
data = matfile.readlines()
matfile.close()
data = [ s[:-1] + "!\n" for s in data ]
emissionmat_file = open("output%d.txt" %run, "w")
emissionmat_file.writelines(data)
emissionmat_file.close()
它为文件input.txt
中的每一行添加了一个感叹号。
答案 2 :(得分:0)
我解决了它
关闭文件之前我做
matfile.seek(0)
这解决了我的问题。此方法将阅读器的指针设置为开头。