读取值数组以格式化的块导出?

2024-09-27 02:27:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我想知道有没有办法读懂这样的表格:

x1 y1 z1
x2 y2 z2
.. .. ..
xn yn zn

然后让我的代码打印一个如下所示的文本文件:

\object{x1}
\ra{y1}
\dec{z1}

\object{x2}
\ra{y2}
\dec{z2}

\object{..}
\ra{..}
\dec{..}

\object{xn}
\ra{yn}
\dec{zn}

到目前为止,我有一个可以读取这些数组的代码,但是我不知道如何将它们保存到一个文本文件中,而这个文本文件不是读取的内容。有没有一种方法,我可以有一些定制的格式打印这些行,如上面?你知道吗

我试过了

你知道吗np.savetxt文件('数据.txt',zip(x,y,z),fmt='(在这里处理格式选项)')

但我运气不好,也不确定savetxt是否是正确的路线。非常感谢您的帮助!你知道吗


Tags: 代码object格式decrax1x2文本文件
3条回答

你需要把读写过程分开。一种涉及使用模块csv从文件中读取逗号分隔值(在本例中,不是逗号而是空格)的解决方案。
这里data.txt是带有表的文件,out.txt是具有所需格式的文件。你知道吗

import csv

with open('data.txt') as rr:
    reader = csv.reader(rr, delimiter=' ')
    with open('out.txt', 'w') as oo:
        for line in reader:
            oo.write(f"\\object{{{line[0]}}}\n")
            oo.write(f"\\ra{{{line[1]}}}\n")
            oo.write(f"\\dec{{{line[2]}}}\n\n")

注意formatted string literals中的三个花括号两个大括号打印一个大括号,一个打印变量值。你知道吗

如果python版本为<;3.6,请改用:

oo.write("\\object{{{}}}\n".format(line[0]))
oo.write("\\ra{{{}}}\n".format(line[1]))
oo.write("\\dec{{{}}}\n\n".format(line[2]))

评论后编辑

要在每个块中添加额外的行,只需在for循环中对oo.write进行额外调用即可。例如:

oo.write(f"\\object{{{line[0]}}}\n")
oo.write(f"\\ra{{{line[1]}}}\n")
oo.write(f"\\dec{{{line[2]}}}\n")
oo.write("\color{red}\n\n") #no need to use format here, one curly bracket is enough

最后一行不依赖于line,因此for循环的每次迭代都是相同的。你知道吗

这应该可以做到:

import numpy as np

txt = np.genfromtxt('input.txt', dtype='str')

# python >= 3.6
with open('outfile.txt', 'w') as file:
    file.write("\n".join(
        [f'\\object{{{row[0]}}}\n'
         f'\\ra{{{row[1]}}}\n'
         f'\\dec{{{row[2]}}}\n'
         '\\color{red}\n' # static line
         for row in txt]
    ))

# python < 3.6
with open('outfile.txt', 'w') as file:
    file.write("\n".join(
        ['\\object{{{row[0]}}}\n'
         '\\ra{{{row[1]}}}\n'
         '\\dec{{{row[2]}}}\n'
         '\\color{{red}}\n'.format(row=row) # static line
         for row in txt]
    ))

如果您有一个数组arr,并且希望您的输出在一个文件中,您可以尝试:

arr = [['x1','y1','z1'],
       ['x2','y2','z2'],
       ['x3','y3','z3']]


with open('latex.txt', 'a') as myfile:
    [myfile.write('\object{'+row[0]+'}\n\\ra{'+row[1]+'}\n\dec{'+row[2]+'}\n\n') for row in arr]

相关问题 更多 >

    热门问题