繁体   English   中英

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 等中执行此操作的等效方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM