首页 > 解决方案 > 如何仅更改 txt 文件中的一列,使其他所有内容保持不变并尊重空格?

问题描述

我有一个包含很多行的文件。为了安全起见,从某种意义上说,我只是 c/p,它给出了我的文件的形状。

| 来自 2b97.pdb 的马提尼酒系统 |
| 55601 |
| 1ALA BB 1 13.904 5.512 1.259 |
| 12VAL BB 12 4.199 35.292 21.353 |
| 112VAL SCC 113 4.367 5.234 21.445 |
| 1113CYS BB 1114 4.041 4.969 21.220 |
| 11113CYS SCC11115 4.088 14.816 21.041 |
| 19293DEC C55598 19.018 0.828 7.094 |
| 9.05570 9.05570 30.02670 |

我需要在最后一列添加 0.1 个单位。

因此,我的输出文件应该看起来像这样:

| 来自 2b97.pdb 的马提尼酒系统 |
| 55601 |
| 1ALA BB 1 13.904 5.512 1.359 |
| 12VAL BB 12 4.199 35.292 21.453 |
| 112VAL SCC 113 4.367 5.234 21.545 |
| 1113CYS BB 1114 4.041 4.969 21.320 |
| 11113CYS SCC11115 4.088 14.816 21.141 |
| 19293DEC C55598 19.018 0.828 7.194 |
| 9.05570 9.05570 30.02670 |

最重要的是我的输出文件应该具有完全相同的空格、格式和 dtype。该文件中的所有内容都是一个字符串。

如果不尊重空格、格式和 dtype,那么我不能使用输出文件在我需要的程序中运行。

以防万一,我不需要保留初始文件(尽管我认为这部分与我添加无关)。

谢谢你的帮助。我试过了,但我的问题是我不能用 python 保持相同的形状。

标签: pythonpython-3.xpandas

解决方案


像另一个答案一样,我会使用字符串切片来获取最后一列,并使用字符串连接将行重新组合在一起。但是,我将decimal.Decimal用于定点数学:

import fileinput
import decimal
import sys

files = ['x.txt']

for line in fileinput.input(files, inplace=True):
    number = line[38:46]
    try:
        number = decimal.Decimal(number)
        number += decimal.Decimal('.1')
        number = '{:8}'.format(number)
        line = line[:38] + number + line[46:]
    except decimal.InvalidOperation:
        pass
    sys.stdout.write(line)

推荐阅读