Python在while循环中读取文件

时间:2013-06-06 08:36:01

标签: python file-io while-loop

我目前处于关于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)

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


3 个答案:

答案 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)

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