У меня есть следующий файл .sql:
execute_all.log
set echo on
SET SQLBLANKLINES ON
@@2019-03-26_DX_1.sql
@@2019-05-10_DX_2.sql
@@2019-05-10_DX_3.sql
@@2019-05-14_1600_DX_4.sql
@@2019-05-21_0900_DX_5.sql
@@2019-05-21_0900_DX_6.sql
@@2019-05-21_0900_DX_7.sql
@@2019-05-21_0900_DX_8.sql
SET SQLBLANKLINES OFF
spool off;
@@make_constraint.sql
все, что начинается с "@@", является именем файла, которое относится ко мне.В списке у меня есть еще следующие файлы:
skripts_to_deploy = ['2019-05-14_1600_DX_4.sql','2019-05-15_1500_DX_55.sql']
Критерии следующие:
- , если файл уже существует, пропустите файл
- Если файл нене существует, затем перейдите через строку файлов.Если дата файла (часть после @@) файла в
skripts_to_deploy
меньше, чем в следующей строке, то добавьте строку (имя файла) в это место (и оставьте также другие строки, но смещенные, при необходимости).
Вот код:
path = "C:\\Users\\danyef"
skripts_to_deploy = ['2019-05-14_1600_DX_13.sql','2019-05-15_1500_DX_55.sql']
level = 'DXIDS'
with open(level + "_EXECUTE_ALL.sql","r+") as file:
for line in file:
if line == "execute_all.log\n" or line == "set echo on\n" or line == "SET SQLBLANKLINES ON\n":
continue
for skript in skripts_to_deploy:
if '@@' + skript in line:
continue
next_line = next(file)
print(next_line)
if next_line == 'SET SQLBLANKLINES OFF':
file.write('@@' + skript + '\n')
print("written SET SQLBLANKLINES OFF:",skript)
else:
next_line = datetime.strptime((next_line.split('_')[0]).split('@@')[1],'%Y-%m-%d')
if datetime.strptime(skript.split('_')[0],'%Y-%m-%d')<= next_line:
file.write('@@' + skript + '\n')
print("written:",skript)
Важное примечание: next_line = datetime.strptime((next_line.split('_')[0]).split('@@')[1],'%Y-%m-%d')
просто извлекает дату из строки в существующем файле.
В моем коде это добавляет строку, но вместо правильного места (на основе критериев, упомянутых выше) это делает это в конце файла.
Может быть, пропущены некоторые другие с моей стороны, пожалуйстаисправить это.Спасибо заранее.
РЕДАКТИРОВАТЬ: Ожидается Выход:
execute_all.log
set echo on
SET SQLBLANKLINES ON
@@2019-03-26_DX_1.sql
@@2019-05-10_DX_2.sql
@@2019-05-10_DX_3.sql
@@2019-05-14_1600_DX_4.sql
**@@2019-05-15_1500_DX_55.sql**
@@2019-05-21_0900_DX_5.sql
@@2019-05-21_0900_DX_6.sql
@@2019-05-21_0900_DX_7.sql
@@2019-05-21_0900_DX_8.sql
SET SQLBLANKLINES OFF
spool off;
@@make_constraint.sql