gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 06:25:38 24 4
gpt4 key购买 nike

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

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

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

最佳答案

步骤是:

  • 读入每一行,将其分成字段
  • 将结果累加到列表列表中
  • 使用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

关于python - 在 Python 中反转文件中的一列文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8454507/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com