Python заменить строку внутри самого файла, используя регулярное выражение - PullRequest
0 голосов
/ 26 марта 2020

Я работаю на сервере RedHat Linux, и установлена ​​версия python 2.6 . У меня есть pyhton скрипт, который должен заменить строку в файле .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.

Если кто-то мне поможет, рассмотрите python версию 2.6, которую я должен использовать, и, пожалуйста, скажите мне, какую библиотеку мне нужно импортировать. Я знаю, что для выражения reg нужна re библиотека.

Заранее спасибо. Алессандро.

1 Ответ

0 голосов
/ 26 марта 2020

Понятия не имею, работает ли это на 2.6 - извините. Я тоже ничего не имею о RedHat Server - извините. И я не знаю много о SQL - извините. Это не идет хорошо, верно? : о) Но если это поможет в качестве примера ...

С учетом теста. 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 et c.

...