【问题标题】:I need to write 3 arrays to a text file in columns [closed]我需要将 3 个数组写入列中的文本文件 [关闭]
【发布时间】:2016-12-13 09:17:38
【问题描述】:

数组如下

array1=np.array([1.5397e-05,8.7383e+00,2.6633e+01,1.1309e+03,4.3194e+02,2.5086e+01])
array2=np.array([4.83,1.4,0.4,-7.2,-3.64,0.6])
array3=([‘Sun’,’Sirius’,’Arcuturus’,’Betelgeuse’,’Polaris’,’Vega’])

我希望数据类似于以下名为 star.txt 的文本文件中的信息。

Sun         1.5397e-05   4.83
Sirius      8.7383e+00   1.4
Arcuturus   2.6633e+01   0.4
Betelgeuse  1.1309e+03   -7.2
Polaris     4.3194e+02   -3.64
Vega        2.5086e+01   0.6

有人可以帮忙吗?

【问题讨论】:

  • 您似乎希望我们为您编写一些代码。虽然许多用户愿意为陷入困境的编码人员编写代码,但他们通常只有在发布者已经尝试自己解决问题时才会提供帮助。展示这项工作的一个好方法是包含您迄今为止编写的代码、示例输入(如果有的话)、预期输出和您实际获得的输出(输出、回溯等)。您提供的详细信息越多,您可能收到的答案就越多。检查FAQHow to Ask
  • 也许这会帮助您入门:stackoverflow.com/questions/16621351/…
  • 发布代码时请不要使用“智能引号”。
  • 对不起,我将添加我尝试过的编码。

标签: python arrays file text


【解决方案1】:

免责声明:一旦你已经在使用 NumPy,我就会使用矢量化方法,即(没有循环,使用 NumPy 或 pandas 的力量为你做这件事)

您可以使用@pathoren 在评论中提到的np.savetxt() 函数:

np.savetxt('c:/temp/out.csv', np.array([array3, array1, array2]).T, delimiter='\t', fmt="%s")

或使用 pandas 模块:

import pandas as pd

pd.DataFrame({'col1':array3,'col2':array1,'col3':array2}).to_csv('c:/temp/out.csv', index=False, header=None, sep='\t')

注意:我不建议您使用空格/制表符分隔的文本,因为它可能会在将来导致问题(例如,当您需要读取/解析此文件时,如果您的星号名称中有多个单词)

【讨论】:

  • 非常感谢。我尝试了 np.savetxt 的不同变体并使用了 pd.dataframe 但似乎只能以错误的方式打印文件,其中 array3 在中间而不是开头。
【解决方案2】:

怎么样?

import numpy as np

array1=np.array([1.5397e-05,8.7383e+00,2.6633e+01,1.1309e+03,4.3194e+02,2.5086e+01])
array2=np.array([4.83,1.4,0.4,-7.2,-3.64,0.6])
array3 = ['Sun','Sirius','Arcuturus','Betelgeuse','Polaris','Vega']

with open('star.txt', 'w') as f:
    for a, b, name in zip(array1, array2, array3):
        f.write('{0:15}{1:15}{2:15}\n'.format(name, a, b))

输出

文件star.txt在同一文件夹中,内容如下:

Sun                 1.5397e-05           4.83
Sirius                  8.7383            1.4
Arcuturus               26.633            0.4
Betelgeuse              1130.9           -7.2
Polaris                 431.94          -3.64
Vega                    25.086            0.6

作为记录,如果您使用比 array1array2 等更多的描述性变量名会很好,这样我就可以使用比 ab 等更多的描述性变量名。

【讨论】:

  • 非常感谢,这真的很有帮助,对不起,我忘了列出我已经尝试过的代码。
【解决方案3】:

它是如此简单,几乎不值得指出你应该真的能够自己解决这个问题。我建议你遵循一个基本的 Python 教程,网上有很多。

有几种解决方案,这是我的:

import numpy as np

array1=np.array([1.5397e-05,8.7383e+00,2.6633e+01,1.1309e+03,4.3194e+02,2.5086e+01])
array2=np.array([4.83, 1.4, 0.4, -7.2, -3.64, 0.6])
array3=(['Sun','Sirius','Arcuturus','Betelgeuse','Polaris','Vega'])

with open('star.txt', 'w') as fh:
    for a,b,c in zip(array1, array2, array3):
        print("%-10s  %e  %05.2f" % (c, a, b), file = fh)

假设是 Python 3。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-16
    • 2016-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多