[英]Alternative to bash (awk command) with python
上下文:我在提供结果文件的程序上运行计算。 在这些结果文件(扩展名为.h5)上,我可以应用一个python代码(我无法更改此python代码),以便它给我一个方矩阵:
oneptdm.py resultfile.h5
以我为例:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
points groups
1
2
3
...
在名为oneptdm.dat的文件中
我想grep这个矩阵的对角线。 通常我只使用bash:
awk '{ for (i=0; i<=NF; i++) if (NR >= 1 && NR == i) print i,$(i) }' oneptdm.dat > diagonal.dat
但是由于x的原因,我现在必须使用python来做。 我怎样才能做到这一点 ? 我当然可以再次使用“子进程”再次使用awk,但我想知道是否存在使用2.6版python脚本进行此操作的替代方法。 结果应为:
(line) (diagonal element)
1 1
2 6
3 11
4 16
您可以尝试如下操作:
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
示例文件的输出:
1 1 2 6 3 11 4 16
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.