Python 对文件进行更改并将其写回?
我有一个如下所示的文件:Python 对文件进行更改并将其写回?,python,replace,Python,Replace,我有一个如下所示的文件: #交换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 #交易所2 1 1.00 2
#交换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
#交易所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
...
#交易所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 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])
您可以使用
re
模块(re.sub
)将行替换为#exchange
例如(file.txt
包含问题的文本):
印刷品:
# 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
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