temp.txt文件的示例:
文件:t091110_065921.SFTC Src:J1903 + 0925 Nsub:1 Nch:1 Npol:4 Nbin:1024 RMS:0.00118753
0 0 0 0.00148099 -0.00143755 0.000931365 -0.00296775
0 0 1 0.000647476 -0.000896698 0.000171287 0.00218597
0 0 2 0.000704697 -0.00052846 -0.000603842 -0.000868739
。
。
等等。
谢谢!
为了回应这是如何生成的,我使用了以下代码:
for i in range(numrows):
epoch_name = y['filename'][i]
os.system('pdv -t {0} > temp.txt '.format(epoch_name))
stokes_line = np.genfromtxt('temp.txt', usecols=3, dtype=[('stokesI','float')], skip_header=1)
stokes_list.append(stokes_line)
stokes_columns = zip(*stokes_list)
因此,每次程序循环(进入文本文件)时,我使用“pdv”命令的其他软件生成一个值网格。然后我从这个文本文件中提取1个特定列并将其添加到“stokes_list”。最后,我将数组转换(或者不管它是什么),以便列成为行。
我在Python中有一个列表(或任何数组,我实际上并不理解术语)的列表,如下所示:
[((1,)(2,)(3,)),((4,)(5,)(6,)),((7,)(8,)(9,))]
首先,我不确定为什么方括号内有圆括号,而不是方括号内的方括号。其次,我不知道为什么数字后面有逗号,而且它们自己出现在括号中。无论如何 - 也许需要更多的背景来回答这个问题。但我真正的问题是,我正在尝试将其写入文件格式:
1 2 3
4 5 6
7 8 9
我在尝试:
with open('final.txt','w') as f:
for row in stokes_columns:
f.write('\t'.join(row)+'\n')
其中“stokes_columns”是我顶部的数组/列表的名称。
我收到错误消息:
f.write('\t'.join(row)+'\n')
TypeError: sequence item 0: expected string, numpy.void found
有人可以帮我这个吗?
答案 0 :(得分:2)
join
需要一个字符串数组。你的第3行应该是:
f.write('\t'.join(str(cell) for cell in row)+'\n')
如果你愿意,你可以在一个陈述中完成整个事情:
f.write('\n'.join(
'\t'.join(str(cell) for cell in row)
for row in stokes_columns
))
答案 1 :(得分:2)
这不是创建或转置numpy矩阵的方法(特别是因为它不是一个numpy矩阵 - 它是numpy向量的常规列表)。请尝试以下方法:
stokes_list = np.array([])
for i in range(numrows):
epoch_name = y['filename'][i]
os.system('pdv -t {0} > temp.txt '.format(epoch_name))
stokes_line = np.genfromtxt('temp.txt', usecols=3, dtype=[('stokesI','float')], skip_header=1)
stokes_list = vstack(stokes_list, stokes_line)
stokes_columns = np.transpose(stokes_list)
答案 2 :(得分:2)
而不是您指定的列表(我认为它不应该是它)
假设它是[((1,),(2,),(3,)),((4,),(5,),(6,)),((7,),(8,),(9,))]
以下内容应该在某种程度上帮助您
获得最终输出后,可以使用它将其推送到行
In [74]: str = [((1,),(2,),(3,)),((4,),(5,),(6,)),((7,),(8,),(9,))]
In [75]: str2 = []
In [76]: for elem in str:
....: str2.append([data[0] for data in elem])
....:
In [77]: str2
Out[77]: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
In [78]: for elem in zip(*str2):
....: print elem
....:
(1, 4, 7)
(2, 5, 8)
(3, 6, 9)
根据OP的上次编辑,更改了输出:
In [92]: for elem in str2:
....: print elem
....:
[1, 2, 3]
[4, 5, 6]
[7, 8, 9]
答案 3 :(得分:2)
你没有尝试拖写一个元组列表,而是一个具有灵活数据类型的numpy数组(在这种情况下为void
,相应于你的TypeError
)。灵活的dtypes没有预定义的大小,因此在保存之前,您应该决定要用于存储阵列的dtype。例如,假设您希望将数据存储为int16,则可以执行以下操作:
your_array.astype('int16').tofile(filename)
我认为它应该有用。
答案 4 :(得分:0)
tofile()函数将所有项(作为机器值)写入文件对象f。
也许savetxt()
是am ascii-file