在Python中反转文件的一列文本

时间:2011-12-10 04:59:38

标签: python

我正在编写一个重新格式化文本文件的程序。旧文件包含几列文本,如下所示。

Take
3
29
1001 83.489601 279.859650 1.000000
1002 83.489594 271.848480 0.997735
1003 83.489594 263.837311 0.997337
1004 83.489594 256.076111 0.996816
1005 83.364594 248.189941 0.995626
1006 83.364594 240.178787 0.994840   

我的程序目前以我想要的格式将其写入新文件,并添加一些行。它看起来像这样:

clip
Values 12
trick, pos, ypos, similarity
1001 83.489601 279.859650 1.000000
1002 83.489594 271.848480 0.997735
1003 83.489594 263.837311 0.997337
1004 83.489594 256.076111 0.996816
1005 83.364594 248.189941 0.995626
1006 83.364594 240.178787 0.994840

我现在需要做的是颠倒新文件的第三列数字的垂直顺序。它应该看起来像这样:

clip
Values 12
trick, pos, ypos, similarity
1001 83.489601 240.178787 1.000000
1002 83.489594 248.189941 0.997735
1003 83.489594 256.076111 0.997337
1004 83.489594 263.837311 0.996816
1005 83.364594 271.848480 0.995626
1006 83.364594 279.859650 0.994840

我可以一次拆分第三组数字,但无法弄清楚我应该如何将该列重新写入正确的位置。文件中有多个块,长度各不相同。我只需要一个开始工作的方向,因为我现在已经完全迷失了。我应该考虑什么样的功能来帮助我实现这一目标?任何帮助,将不胜感激。我是编码的新手,我正在使用Python 3.2.2

1 个答案:

答案 0 :(得分:1)

步骤如下:

  • 读入每一行,将其拆分为字段
  • 在列表列表中累积结果
  • 使用zip(*t)转置数组
  • 选择适当的行(以前为列),然后使用 list.reverse
  • 转置回列格式
  • 将行写入磁盘

以下是一个例子:

 >>> s = '''\
 1001 83.489601 279.859650 1.000000
 1002 83.489594 271.848480 0.997735
 1003 83.489594 263.837311 0.997337
 1004 83.489594 256.076111 0.996816
 1005 83.364594 248.189941 0.995626
 1006 83.364594 240.178787 0.994840
 '''.splitlines()
 >>> result = []
 >>> for line in s:
         result.append(line.split())


 >>> t = zip(*result)
 >>> t[2] = t[2][::-1]
 >>> result = zip(*t)
 >>> for row in result:
         print ' '.join(row)


 1001 83.489601 240.178787 1.000000
 1002 83.489594 248.189941 0.997735
 1003 83.489594 256.076111 0.997337
 1004 83.489594 263.837311 0.996816
 1005 83.364594 271.848480 0.995626
 1006 83.364594 279.859650 0.994840