【发布时间】:2017-02-15 17:00:50
【问题描述】:
所以我有这个任务,我想打印到一个文本文件。该文件包括标题信息和具有特定名称的数据列。代码如下:
import numpy as np
data={'dpr_NS_corZFac': [np.nan, np.nan, 35.736231803894043, 36.331412792205811,
35.694644451141357, 36.576189994812012, 37.236752510070801,
38.173699378967285, 38.808069229125977, 36.761274337768555,
30.194313526153564],
'dpr_HS_corZFac': [np.nan, 38.550984859466553, 37.893826961517334, 40.246520042419434,
39.204437732696533, 37.227160930633545, 37.364296913146973,
40.320019721984863, 39.04454231262207, 33.014707565307617,
27.193448543548584],
'npol':[np.nan, np.nan, 35.736231803894043, 36.331412792205811,
35.694644451141357, 36.576189994812012, 37.236752510070801,
38.173699378967285, 38.808069229125977, 36.761274337768555,
30.194313526153564] }
datafile_path = '/home/cpabla/data/pandastext.txt'
with open(datafile_path, 'w+') as f:
f.write('Charanjit is writing this text file.')
f.write('\t'*4)
f.write('He continues to write....\n')
for tag in data:
f.write('{}\t\t'.format(tag))
f.write('\n')
for val1, val2, val3 in zip(data['dpr_NS_corZFac'], data['dpr_HS_corZFac'], data['npol']):
if np.isnan(val1): val1 = 99.99
if np.isnan(val2): val2 = 99.99
if np.isnan(val3): val3 = 99.99
f.write('{:.2f}'.format(val1))
f.write('\t'*7)
f.write('{:.2f}'.format(val2))
f.write('\t'*7)
f.write('{:.2f}'.format(val3))
f.write('\t'*7)
f.write('\n')
代码的细节并不重要,因为这只是为了我的测试。注意我有一个列表字典。我将在字典中有未知数量的列表,并且我想生成示例输出中给出的 for 的文本文件。但是,请注意我是如何遍历多个变量的(在本例中是我的字典中的列表)。我显然想自动化这个,所以我不必继续向 for 循环添加变量。那么有没有更好的方法来做到这一点?
这是输出:
Charanjit is writing this text file. He continues to write....
dpr_HS_corZFac dpr_NS_corZFac npol
99.99 99.99 99.99
99.99 38.55 99.99
35.74 37.89 35.74
36.33 40.25 36.33
35.69 39.20 35.69
36.58 37.23 36.58
37.24 37.36 37.24
38.17 40.32 38.17
38.81 39.04 38.81
36.76 33.01 36.76
30.19 27.19 30.19
然而,文本编辑器的实际输出不是这样的。每列都有自己的标题名称,这正是我想要的。输出只是为了向您展示我正在尝试做的事情。
【问题讨论】:
-
可能你想要
zip(data.values()) -
@juanpa.arrivillaga 那么它们不会按任何特定顺序排列。
-
是的,顺序对我来说很重要。我希望它是我在字典中定义数据的方式。
-
好吧,那么您的两个选择是硬编码或使用
OrderedDict