0

我目前在 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)

这会将指针重置为文件的开头,并允许我在下次运行时正确读取文件。


4

3 回答 3

1

为什么要写入文件然后读取它?此外,您使用冲洗,因此您可能会做长 io。我会做

with open(originalpath) as f:
    mat = f.read()
while condition :
    run += 1
    write_mat_run(mat, run)
    mat = func(mat)

write_mat_run 可以在另一个线程中完成。您应该检查 io 异常。

顺便说一句,这可能会解决您的错误,或者至少说清楚。

于 2013-06-06T09:03:38.637 回答
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

于 2013-06-06T09:03:08.187 回答
0

我解决了

在我关闭文件之前

matfile.seek(0)

这解决了我的问题。此方法将阅读器的指针设置为开头。

于 2013-06-07T08:30:02.960 回答