【问题标题】:How can I put my simulation result into a .txt file when it is an array?当它是一个数组时,如何将我的模拟结果放入 .txt 文件中?
【发布时间】:2024-01-19 03:20:01
【问题描述】:

我用这个脚本模拟了一个模型,现在我只想用文本文件中的符号 t1 替换 T1

应该如何将 T1 从数组更改为其他东西,以便我可以替换它?

from pymodelica import compile_fmu
        from pyfmi import load_fmu
        # Import the plotting library
        import matplotlib.pyplot as plt
        import numpy as np
        # Compile model
        model_name = 'Testerequal'
        mo_file = 'Testerequal.mo'
        VDP_fmu = compile_fmu('Testerequal', compiler_options = {'extra_lib_dirs':'D:\JModelica.org-1.17\Testerequal'})
        # Load model
        vdpid = load_fmu(VDP_fmu, log_level=7)
        res = vdpid.simulate(final_time=86400)

        x0= res["int.y"]
        t0= res["time"]

        T1 = x0[40] 

    f = open('D:/JModelica.org-1.17/Testertwo/That.txt','r')
filedata = f.read()
f.close() 

    newdata = filedata.replace('t1',T1)

    f = open('D:/JModelica.org-1.17/Testertwo/That.txt','w')
f.write(newdata)
f.close()

【问题讨论】:

  • 你需要什么格式? CSV?
  • 这种格式对我来说不是一个交易,只要我可以用文本文件中的字母代替它就足够了。
  • 宇航员你必须移动到较低的轨道,因为没有人知道你在做什么。 “在文本文件中用符号 t1 替换 T1”不是英语中有意义的语句,并且无法根据您的其他语句和示例代码猜测。也许您需要通过显示文件的前后来说明?而替换功能是从哪里来的,我们应该知道吗?
  • 我所做的并不复杂,我从模拟中得到了一些结果,它们是 x0 和 t0,它们中的每一个(x0 和 t0)都包含一些数字,例如,如果我输入 x0 [5] 我得到 234,如果我输入 x0[40] 我得到 567 作为输出,所以我准备了一个文本文件,其中包含一些数字 > t0,t1,t2,t3 的字母...... ,我只想替换 x0 的每个值,例如 t0 中的 x0[40] ......脚本没问题,基本上唯一的事情是当我尝试替换上述值时 python 会出错(x0[4])进入 t0(在我的文本文件中)。
  • @Schollii 您是否可以仅查看此内容并告诉我问题所在?

标签: python python-2.7 python-3.x ipython simulation


【解决方案1】:

问题是您试图用 numpy 浮点数替换字符串。

在您的情况下,变量 x0 是一个 numpy 浮点数组,因此 T1 是一个 numpy 浮点数。现在,当您尝试替换 t1 时,由于 T1 不是字符串,它会给您一个错误。如果只想用 T1 的值代替 t1,只需将其转换为字符串即可,即:

    filedata.replace("t1", str(T1))

【讨论】:

  • 非常感谢克里斯蒂安。
  • 很高兴你能弄清楚 OP 的目标是什么
【解决方案2】:

如果我正确理解了这个问题,您希望将 NumPy 数组输出到文本文件中。在这种情况下,您可以使用:

np.savetxt('filename.txt', T1)

如果这不是您想要的,请告诉我。

【讨论】:

  • 实际上我想用另一个 .txt 文件中的符号替换 T1 。使用此命令 newdata = filedata.replace('t1',T1) 但它给了我错误,我必须先将 T1 转换为某种东西,然后才能执行替换,但我不知道是什么?
最近更新 更多