将结果从我的代码打印到.txt不再起作用

时间:2019-08-08 15:24:33

标签: python

我正在尝试将算法(分数)的某些结果打印到.txt文件中,以获取该数据以进行进一步分析。在这里,算法将创建文件,然后将其打开以将数字记下来。然后我考虑再次关闭它。 我的问题是,我什至找不到文件。如果我自己创建一个,而只尝试写数字,那也行不通。

这是针对机器人的强化学习的分析。分数象征着Q值,对于进一步分析很重要。分数是一个随机数。

if __name__ == '__main__':
    open('try.txt', 'w+').close()

    for e in range(agent.load_episode + 1, EPISODES):
        ...
        for t in range(agent.episode_step):
           ...
            if done:
               ...
                saveFile = open('try.txt','w')
                saveFile.write(str(score))
                saveFile.close()


从第一部分开始,我尝试创建一个名为try.txt的新文件(我只创建一次该文件)。之后,我打开文件,写一些东西然后再次关闭。计算下一个Q值时,将再次打开文件。

2 个答案:

答案 0 :(得分:0)

尝试将saveFile = open('try.txt', 'w')更改为with open('try.txt', 'a+') as saveFile:

答案 1 :(得分:0)

文件应该只包含最后一个计算值,还是一次运行的所有值(可能是新行中的每个值),甚至是单独运行的值?不过,您可能正在寻找经过一些修改,删节的内容:

if __name__ == '__main__':
    with open('try.txt', 'w') as saveFile:  # change to 'a' if you want the results to be stored between runs
        for e in range(agent.load_episode + 1, EPISODES):
            ...
            for t in range(agent.episode_step):
                ...
                if done:
                    ...
                    # saveFile.truncate()  uncommenting this means that the file only stores the latest value
                    saveFile.write(str(score) + '\n')  # write each result to new line
                    saveFile.flush()  # this line makes the results accessible from file as soon as they are calculated

在python中, with 是打开文件的首选方法,因为它会在适当的时候关闭文件。当以“ w”模式打开文件时,文件内的插入符号位于文件的开头,如果文件中包含任何数据,则将其删除。

“ a”模式追加到文件。您可能想看看this

现在,我相信您想不停地打开和关闭文件,以便在迭代完成后立即访问数据。那就是saveFile.flush()的目的。请让我知道这是否对您有帮助!


要更好地控制文件的创建位置,请使用os模块:

import os
directory = os.path.dirname(os.path.abspath(__file__))
file_path = os.path.join(directory, 'try.txt')
# print(file_path)
with open(file_path, 'w') as saveFile: