在python3中将动态大小的数组写入文件

如何解决在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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?