如何解决在python3中将动态大小的数组写入文件
我正在尝试将ASCII数据以以下格式写入文本文件:
Time Heat Flux ...
0.023 1.793 ...
.
.
.
文本标题来自尺寸为 1 x n 的标签列表和尺寸为 m x n 的数字数据。当我以这种方式知道先验的行数和列数时,通常会打印此信息:
# ... open file object,etc.
# Print header
print('%16s \t %16s' % ('Time','Heat Flux'),file=fileObject)
for ii in range(0,len(heatFlux):
print('%16.3f \t %16.3f' % (heatFlux[ii][0],heatFlux[ii][1]),file=fileObject)
我想要一个通用代码,使我可以使用动态大小的数组(就列数而言)写入这些文件。我试图生成一个字符串并插入标记和空格,然后将它们写入文件,但是我不确定如何对字符串本身进行“格式打印”。
例如,我正在尝试
tagHeader = []
for tag in keyTags:
tagHeader = tagHeader + tag + '\t'
# ...
print(tagHeader,file=fileObject)
有人可以帮我吗?谢谢!
解决方法
如果您有一个包含标题和2D数据结构的列表,则可以执行以下操作:
from random import uniform,randint
def table(header,data):
print('\t'.join(['%16s'] * len(header)) % tuple(header))
for row in data:
print('\t'.join(['%16.3f'] * len(header)) % tuple(row))
以下是一些测试:
header1 = ['Time','Heat Flux']
header2 = ['Time','Heat Flux','New col']
header3 = ['This','is','a','test']
data1 = [[uniform(-10,10) for _ in range(len(header1))] for _ in range(randint(2,10))]
data2 = [[uniform(-10,10) for _ in range(len(header2))] for _ in range(randint(2,10))]
data3 = [[uniform(-10,10) for _ in range(len(header3))] for _ in range(randint(2,10))]
table(header1,data1)
table(header2,data2)
table(header3,data3)
输出:
Time Heat Flux
7.037 -1.528
8.058 5.649
Time Heat Flux New col
-9.590 4.846 -4.024
-8.597 9.718 -8.174
9.260 -0.947 -6.675
3.401 -5.101 8.323
0.099 -6.582 3.951
This is a test
-2.126 -0.678 4.782 -7.849
-9.007 -0.019 -4.402 8.017
-7.399 -7.617 6.235 9.320
-0.486 -5.304 -4.723 1.946
2.743 -2.150 -6.779 -2.099
-7.499 -2.618 -9.918 0.674
8.912 -6.648 -7.865 -0.101
0.682 -0.414 7.677 7.167
-3.105 -6.562 6.970 -2.147
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。