【问题标题】:Issue with saving data in files将数据保存在文件中的问题
【发布时间】:2017-10-16 18:08:11
【问题描述】:

我正在尝试将数据保存在文件中。 在我的计算过程中,我最终得到了 3 个数组,Dthick、Dfreq、Dresult。 我想将它们打印在这样的文件中

Dthick1  Dfreq1 Dresult1
Dthick2  Dfreq2 Dresult2
Dthick3  Dfreq3 Dresult3
Dthick4  Dfreq4 Dresult4
...      ...    ...

我试过用这个

def DATASAVEUR():
 datafile_path = "datafile.txt"
 datafile_id = open(datafile_path, 'wb')    

 with open('datafile.txt','wb') as datafile_id:
     np.savetxt(datafile_id, Dthick,fmt='%.18f',newline='\n')
     np.savetxt(datafile_id, Dfreq,fmt='%.18f',newline='\n')
     np.savetxt(datafile_id, Dresult,fmt='%.18f',newline='\n')

 datafile_id.close()

但一切都保持在同一条线上。 我试过分隔符和换行符 我试图将所有数据重新组合到一个数组中。 但无论我做什么,我都会得到这样的结果

Dthick1 Dthick2 Dthick3 ...  Dfreq1 Dfreq2 Dfreq3... Dresult1 Dresult2 Dresult3..

答案一定很简单,但我似乎找不到。

【问题讨论】:

  • 我认为newline 参数用于拆分包含多行的数组。尝试改为设置footer='\n'

标签: arrays numpy save


【解决方案1】:

这里有两个不同的问题:

  1. 您以二进制模式打开输出文件(wb 中的b),如果您想将文本写入文件,这不是一个好主意。你在使用 Windows 吗?当您编写文本时,换行符被一系列回车符和换行符替换,但它只是二进制模式下的换行符。删除b,你会得到多行。

  2. 您正在尝试保存第一列,然后是第二列,然后是第三列,但保存到文本文件是按行进行的。您可以将三列组合成一个二维矩阵并保存:

    np.savetxt("datafile.txt", np.vstack((Dthick,Dfreq,Dresult)).T)
    

    或者,您可以遍历三个数组并逐行写入:

    from itertools import izip
    for thick, freq, result in izip(Dthick, Dfreq, Dresult):
        print >>datafile_id, thick, freq, result
    

【讨论】:

  • 对于您的回答,我从 wb 中删除了 b 并收到此错误消息。 “数组dtype('float64')和格式说明符('%.18f')之间不匹配”如果我保留b以使代码运行,np.savetxt(“datafile.txt”,np.vstack((Dthick ,Dfreq,Dresult)).T) 不起作用。我仍然得到相同的结果。
  • 您使用的是什么操作系统,python 的版本是什么? Python 3 seems to behave differently from Python 2。你确定你得到相同的结果吗?我原以为您至少会得到“Dthick1 Dfreq1 Dresult1 Dthick2 Dfreq2 Dresult2 ....”。如果您忽略 newline='\n' 会发生什么?
猜你喜欢
  • 2021-12-21
  • 1970-01-01
  • 2011-12-20
  • 2013-10-16
  • 1970-01-01
  • 1970-01-01
  • 2017-01-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多