Python 格式化数组并写入文本文件

Python 格式化数组并写入文本文件,python,python-2.7,Python,Python 2.7,我是python新手,需要帮助格式化数组并将其存储在文件中 我有个主意要说 a = [['C', [0.99813803, -0.00263872, -0.00464602]], ['H', [2.0944175, -0.00242373, 0.00417336]], ['H', [0.63238996, 1.03082951, 0.00417296]], ['H', [0.62561232, -0.52974905, 0.88151021]], ['H', [0.64010219, -0.50

我是python新手,需要帮助格式化数组并将其存储在文件中

我有个主意要说

a = [['C', [0.99813803, -0.00263872, -0.00464602]], ['H', [2.0944175, -0.00242373, 0.00417336]], ['H', [0.63238996, 1.03082951, 0.00417296]], ['H', [0.62561232, -0.52974905, 0.88151021]], ['H', [0.64010219, -0.50924801, -0.90858051]]]
现在,我想以以下方式将其存储在一个文件中

C   0.99813803 -0.00263872 -0.00464602
H   2.0944175 -0.00242373 0.00417336 
H   0.63238996 1.03082951 0.00417296 
H   0.62561232 -0.52974905 0.88151021
H   0.64010219 -0.50924801 -0.90858051
我尝试了numpy.savetxt,但它以数组格式存储。我知道,使用regex可以删除所有特殊字符,但对我来说,问题只在于从数组中逐行写入

有人能告诉我,除了numpy.savetxt,我还能尝试什么吗

a = [['C', [0.99813803, -0.00263872, -0.00464602]], ['H', [2.0944175, -0.00242373, 0.00417336]], ['H', [0.63238996, 1.03082951, 0.00417296]], ['H', [0.62561232, -0.52974905, 0.88151021]], ['H', [0.64010219, -0.50924801, -0.90858051]]]

with open('file.txt', 'w') as f:
for item, values in a:
    line = "{}   {} {} {}\n".format(item, *values)
    f.write(line)
文件内容(输出):


似乎您正在尝试编写一个tsv或csv文件,其中分隔符是制表符或空格。那么为什么不使用这个模块呢

那么您的文件内容如下所示:

C    0.99813803    -0.00263872    -0.00464602
H    2.0944175    -0.00242373    0.00417336
H    0.63238996    1.03082951    0.00417296
H    0.62561232    -0.52974905    0.88151021
H    0.64010219    -0.50924801    -0.90858051

我会在循环中使用解包来简化一点,如果已知值集正好是三个元素,那么您也可以简化格式行:
对于item,a:
行=
{}{}{}\n
格式(item,*values)
(最后的
行不变)。还要注意:OP在“行标题”和值之间放了三个空格。是的,总是3elements@ShadowRanger改变。非常感谢。我今天学到了一些东西。@AndrésPérez AlbelaH:为了学习,我问如果我的数组看起来像这样会怎么样。[[C',[0.99813803,-0.00263872,-0.00464602],[H',[2.0944175,-0.00242373,0.00417336],[H',[0.63238996,1.03082951,0.00417296],[H',[0.62561232],[0.52974905,0.88151021],[10285901],[0.80901]]@VinodPrime:这看起来和问题中的
列表一样,但是周围有一层额外的括号。您可以对[0]中的项执行
操作:
如果它只是
list
list
的单个元素。如果它不仅仅是一个元素,并且您希望展平外层,那么您应该
导入itertools
,然后执行:
对于item,itertools.chain.from_iterable(a):
中的值,这将展平一级嵌套。
import csv
from itertools import chain

a = [['C', [0.99813803, -0.00263872, -0.00464602]], ['H', [2.0944175, -0.00242373, 0.00417336]], ['H', [0.63238996, 1.03082951, 0.00417296]], ['H', [0.62561232, -0.52974905, 0.88151021]], ['H', [0.64010219, -0.50924801, -0.90858051]]]
with open('filename', 'w') as f:
    writer = csv.writer(f, delimiter='\t', dialect='excel-tab')
    writer.writerows([list(chain.from_iterable(i)) for i in a])
C    0.99813803    -0.00263872    -0.00464602
H    2.0944175    -0.00242373    0.00417336
H    0.63238996    1.03082951    0.00417296
H    0.62561232    -0.52974905    0.88151021
H    0.64010219    -0.50924801    -0.90858051