Python 使用正则表达式替换文件本身中的字符串

Python replace string inside file itself using regular expression

我在 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”。如果您尝试它并且出现错误,也许可以查看错误部分并在 Python 2.x 等中找到等效的方法