Python使用正则表达式替换文件内部的字符串



我在RedHat Linux服务器上进行开发,安装的Python版本是2.6。我有一个Python脚本,它必须替换文件.sql中的字符串。每次运行Python脚本时,我都会传递一个不同的参数,该参数必须替换同一.sql文件中最旧的值。

文件.sql的内容如下:

SELECT * FROM MY_TABLE WHERE 1=1
AND '1234567890' BETWEEN START_VALUE AND END_VALUE
AND JOB = 'EMPLOYEE';

我不想使用一些临时文件进行详细说明,我应该阅读.sql并根据上下文对其进行修改。

我搜索了其他帖子,但一直没有找到最终的解决方案。我试着使用re.sub,但我没有找到如何在.sql中进行有效的替换。

我不知道这是否适用于2.6-对不起。我对RedHat Server也一无所知——对不起。我对SQL了解不多——对不起。进展不顺利,对吧?:o( 但如果这有助于作为一个例子。。。

给定一个包含…的test.sql文件。。。

DECLARE 
@START_VALUE = 100
@END_VALUE = 200
SELECT * FROM MY_TABLE WHERE 1=1
AND '1234567890' BETWEEN START_VALUE AND END_VALUE
AND JOB = 'EMPLOYEE';

你可以试试。。。

import re
# Read data from file
with open('test.sql', 'r') as file:
data = file.read()
print(data)
data = re.sub(r'@END_VALUE = (d+)', r'@END_VALUE = 555', data)
print()
print('After the change...')
print()
print(data)
# Write data back 
with open('test.sql', 'w') as file:
file.write(data)

输出:

DECLARE 
@START_VALUE = 100
@END_VALUE = 200
SELECT * FROM MY_TABLE WHERE 1=1
AND '1234567890' BETWEEN START_VALUE AND END_VALUE
AND JOB = 'EMPLOYEE';
After the change...
DECLARE 
@START_VALUE = 100
@END_VALUE = 555
SELECT * FROM MY_TABLE WHERE 1=1
AND '1234567890' BETWEEN START_VALUE AND END_VALUE
AND JOB = 'EMPLOYEE';

请注意,END_VALUE从"200"更改为"555"。如果你尝试了它,但它出现了错误,也许可以看看零件错误,并在Python2.x等中找到等效的方法。

最新更新