У меня есть дамп nodata sql, и мне нужно пройти его и заменить часть ядра каждого запроса на создание таблицы. Дело в том, где я застрял в том, что мне нужно указать имя таблицы в каждой строке я заменяю с для соответствующей таблицыЗаменить все вхождения строки регулярного выражения с информацией из ввода + строки
Предполагая, что файл, как показано ниже
CREATE TABLE `tablename1` (
-- #columns and keys
) ENGINE=InnoDB AUTO_INCREMENT=5075 DEFAULT CHARSET=utf8;
CREATE TABLE `tablename2` (
-- #columns and keys
) ENGINE=something AUTO_INCREMENT=55 DEFAULT CHARSET=latin1;
Желаемого результата:
CREATE TABLE `tablename1` (
-- #columns and keys
) ENGINE=-myreplacedstring/tablename1; -- #table name 1 is appended to this line
CREATE TABLE `tablename2` (
-- #columns and keys
) ENGINE=myreplacedstring/tablename2; -- #table name 2 is appended to this line
Я попытался
fin = open('dump.sql','r')
filedata = fin.read()
fin.close()
newdata = re.sub('(?<=ENGINE).*;', '-myreplacedstring-', filedata)
fout = open('fed_dump.sql','w')
fout.write(newdata)
fout.close()
, но это только заменяет строку с фиксированным строка, независимо от того, какая таблица она есть.
Я также пытался приблизиться к строке за строкой, чтобы иметь возможность захватить имя таблицы каждый раз, когда я ее передаю, но я не уверен, как это сделать.
with open('dump.sql') as infile, open('dump_fed.sql', 'w') as outfile:
for line in infile:
#tablename= if line contains create table, update tablename, else do nothing
line = re.sub('(?<=ENGINE).*;', '-myreplacedstring-'+tablename, line)
outfile.write(line)
Я застрял на том, как получить имя таблицы для каждой таблицы в мою замененную строку. Любая помощь приветствуется.
Если вы читаете весь файл как одну строку (если она небольшая), я предлагаю захватить все подстроки между 'CREATE TABLE' и') ENGINE = 'в некоторые * table_block * s (вы можете использовать это регулярное выражение -' CREATE \ s + TABLE \ s + \ '[^ \ '] * \' \ s + \ ([^)] * (?: \) (?! \ s + ENGINE =) [^)]) * \) \ s + ENGINE = . * '([demo here] (https://regex101.com/r/aF3iP6/1)), а затем используйте' re.sub (r "\ bENGINE \ b. *", "ENGINE-myreplacedstring-", table_block) '. –
Проблема, с которой я сталкиваюсь, заключается в том, что добавление tablename добавлено в конец myreplacedstring для каждой таблицы. – AdrianBR