正在将 dynamically-sized 个数组写入 python3 中的文件
Writing dynamically-sized arrays to file in python3
我正在尝试将 ASCII 数据写入以下格式的文本文件:
Time Heat Flux ...
0.023 1.793 ...
.
.
.
文本 header 来自维度为 1 x n 的标签列表和维度为 m x n 的数值数据。当我知道行数和列数 a priori 时,我通常会以这种方式打印此信息:
# ... 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)
我想要通用代码,允许我使用 dynamically-sized 数组(根据列数)编写这些文件。我试图生成一个字符串并插入标签和空格,然后将其写入文件,但我不确定如何“format-print”字符串本身。
例如,我正在尝试
tagHeader = []
for tag in keyTags:
tagHeader = tagHeader + tag + '\t'
# ...
print(tagHeader, file=fileObject)
有人可以帮我解决这个问题吗?谢谢!
如果您有一个包含 header 的列表和一个二维数据结构,您可以这样做:
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
我正在尝试将 ASCII 数据写入以下格式的文本文件:
Time Heat Flux ...
0.023 1.793 ...
.
.
.
文本 header 来自维度为 1 x n 的标签列表和维度为 m x n 的数值数据。当我知道行数和列数 a priori 时,我通常会以这种方式打印此信息:
# ... 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)
我想要通用代码,允许我使用 dynamically-sized 数组(根据列数)编写这些文件。我试图生成一个字符串并插入标签和空格,然后将其写入文件,但我不确定如何“format-print”字符串本身。
例如,我正在尝试
tagHeader = []
for tag in keyTags:
tagHeader = tagHeader + tag + '\t'
# ...
print(tagHeader, file=fileObject)
有人可以帮我解决这个问题吗?谢谢!
如果您有一个包含 header 的列表和一个二维数据结构,您可以这样做:
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