Python 将列表或数组写入文件

Python 将列表或数组写入文件,python,Python,temp.txt文件的示例: 文件:t091110_065921.SFTC Src:J1903+0925 Nsub:1 Nch:1 Npol:4 Nbin:1024 RMS:0.00118753 0.00148099-0.00143755 0.000931365-0.00296775 0.01 0.000647476-0.000896698 0.000171287 0.00218597 0.0000.000704697-0.00052846-0.000603842-0.000868739 . .

temp.txt文件的示例:

文件:t091110_065921.SFTC Src:J1903+0925 Nsub:1 Nch:1 Npol:4 Nbin:1024 RMS:0.00118753
0.00148099-0.00143755 0.000931365-0.00296775
0.01 0.000647476-0.000896698 0.000171287 0.00218597
0.0000.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”命令的软件,在程序每次循环(进入文本文件)时生成一个值网格。然后我从这个文本文件中拉出一个特定的列,并将其添加到“stokes_列表”中。最后,我转置数组(或任何数组),使列变成行


在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

谁能帮我一下吗?

join
需要一个字符串数组。您的第三行应该是:

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

join
需要字符串数组。您的第三行应该是:

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

这不是创建或转置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)

这不是创建或转置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)

而不是你指定的列表(我认为它不是应该的)

假设它是
[((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]

而不是你指定的列表(我认为它不是应该的)

假设它是
[((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]

您不是在尝试编写元组列表,而是一个具有灵活数据类型的numpy数组(
void
,在本例中,对应于您的
TypeError
)。灵活的数据类型没有预定义的大小,因此在保存之前,您应该决定要使用哪个数据类型来存储阵列。例如,假设您希望将数据存储为int16,则可以执行以下操作:

your_array.astype('int16').tofile(filename)

我认为它应该可以工作。

您不是在尝试编写元组列表,而是一个具有灵活数据类型的numpy数组(
void
,在本例中,与您的
TypeError
相对应)。灵活的数据类型没有预定义的大小,因此在保存之前,您应该决定要使用哪个数据类型来存储阵列。例如,假设您希望将数据存储为int16,则可以执行以下操作:

your_array.astype('int16').tofile(filename)
我认为它应该可以工作。

tofile()函数将所有项目(作为机器值)写入文件对象f。 可能
savetxt()
是am ascii文件的正确函数

tofile()函数将所有项目(作为机器值)写入文件对象f。
也许
savetxt()
是am ascii文件的正确函数

您上面的结构不是简单的列表列表或元组列表-它是由
numpy
生成的。它是如何生成的?您不能将join()应用于整数序列。我认为
((1,)(2,)(3,)
在python中没有意义。是否缺少一些逗号?@Eric:正如TypeError所暗示的,这似乎是来自
numpy
的某个字符串(
numpy
\uuu repr\uuuu
)可能有一些有趣的格式。字符串是这样的
[((1,),(2,,(3,),((4,),(5,,(6,),((7,),(8,),(9,)]
?上面的结构不是简单的列表列表或元组列表,而是由
numpy
生成的。它是如何生成的?您不能将join()应用于整数序列。我认为
((1,)(2,)(3,)
在python中没有意义。是否缺少一些逗号?@Eric:正如TypeError所暗示的,这似乎是来自
numpy
的某个字符串(
numpy
\uuu repr\uuuu
)可能有一些有趣的格式。字符串是这样的
[((1,),(2,,(3,),((4,),(5,,(6,),((7,),(8,),(9,)]
?这不是一个列表列表(或元组或类似的东西):它看起来像是一个
numpy
对象(我不能100%确定是哪个对象),显然是以这种方式打印的。看看TypeError——这并不能解决问题。我意识到它是一个numpy对象——但是,我仍然希望它是iterableI,我不认为它会给出他想要的东西。但我会在还不清楚的时候删除下一票。你可能是对的,但我没有一个numpy安装来测试。这不是一个列表列表(或元组或诸如此类的东西):它看起来像是一个
numpy
对象(我不确定是哪个)以这种方式打印。看看TypeError——这并不能解决问题。我意识到它是一个numpy对象——但是,我仍然希望它是iterableI,我不认为它会给出他想要的东西。但我会在还不清楚的时候取消否决票