更改文件并将其写回吗?

时间:2020-01-04 22:11:23

标签: python replace

我有一个如下文件:

# exchange        1
 1     -1.00      0.00 -52602.05    277.00    277.00      0.00      -1
 2      1.00      0.00 -52557.77    279.00    281.00      2.00      -1
 3      1.00      0.00 -52578.18    281.00    279.00      0.00      -1
# exchange        2
 1      1.00    279.71 -52651.48    277.00    279.00      1.00      -1
 2     -1.00    282.11 -52551.07    281.00    281.00      0.00      -1
 3      1.00    274.73 -52507.33    279.00    277.00      1.00      -1
 ...
# exchange      161
 1     -1.00    310.63 -50702.48    313.00    313.00      0.48      -1
 2     -1.00    294.27 -51919.85    291.00    291.00      0.36      -1

我想在模式“#exchange”的行的第三个值上添加一个常量(例如10),以便:

# exchange      1

将成为:

# exchange      11

在整个文件中保存更改,并将更改保存在原始文件中。

我想出了一些方法来进行更改,但是我不知道如何保存更改。

data_1  = open(sys.argv[1], 'r')
lines_1 = data_1.readlines()
data_1.close()

for line in lines_1:
    p = line.split()
    if p[0] == "#" and p[1] == "exchange":
    a = int(p[2])
    print('p',int(p[2]))
    a += 100
    p.insert(2,a)
    print('p now',p[2])

1 个答案:

答案 0 :(得分:1)

您可以使用re模块(re.sub)将行替换为# exchange <number>

例如(file.txt包含问题中的文字):

import re

CONSTANT = 10

with open('file.txt', 'r') as f_in:
    for line in f_in:
        line = re.sub(r'^(#\s+exchange\s+)(\d+)', lambda g: g.group(1) + str(int(g.group(2))+CONSTANT), line)
        # print the line
        print(line, end='')

打印:

# exchange        11
 1     -1.00      0.00 -52602.05    277.00    277.00      0.00      -1
 2      1.00      0.00 -52557.77    279.00    281.00      2.00      -1
 3      1.00      0.00 -52578.18    281.00    279.00      0.00      -1
# exchange        12
 1      1.00    279.71 -52651.48    277.00    279.00      1.00      -1
 2     -1.00    282.11 -52551.07    281.00    281.00      0.00      -1
 3      1.00    274.73 -52507.33    279.00    277.00      1.00      -1
 ...
# exchange      171
 1     -1.00    310.63 -50702.48    313.00    313.00      0.48      -1
 2     -1.00    294.27 -51919.85    291.00    291.00      0.36      -1