使用python替代bash(awk命令)

2024-04-26 10:37:50 发布

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

上下文:我在一个提供结果文件的程序上运行计算。 在这些结果文件(扩展名.h5)上,我可以应用一个python代码(我不能更改这个python代码),这样它就可以得到一个方阵:

oneptdm.py resultfile.h5

例如:

^{pr2}$

在一个名为一个PTDM.dat在

我想把这个矩阵的对角线变大。通常我只使用bash:

awk '{ for (i=0; i<=NF; i++) if (NR >= 1 && NR == i) print i,$(i) }' oneptdm.dat > diagonal.dat

但是出于x的原因,我现在不得不用python来做。我怎么能做到呢? 当然,我可以使用“subprocess”再次使用awk,但我想知道是否有其他方法可以使用python脚本2.6来实现这一点。 结果应该是:

(line)  (diagonal element)
1       1
2       6
3       11
4       16

Tags: 文件代码py程序矩阵nrdath5
2条回答

你可以试试这样的方法:

with open('oneptdm.dat') as f:
    for i, l in enumerate(f):
        print '%d\t%s' % (i + 1, l.split()[i])

这应该能奏效。它假设文件以一个方阵开头,并且这个假设用于限制从文件中读取的行数。在

with open('oneptdm.dat') as f:
    line = next(f).split()
    for i in range(len(line)):
        print('{0}\t{1}'.format(i+1, line[i]))
        try:
            line = next(f).split()
        except StopIteration:
            break

示例文件的输出:

^{pr2}$

相关问题 更多 >