Я пишу скрипт, который читает файлы sql и использует cx_Oracle для выполнения файлов. Некоторые файлы пишутся с использованием только пробелов между каждым оператором SQL и ключевым словом, а другие используют новые строки и табуляции для пробелов. Я сталкиваюсь с проблемой с последним. Например, этот раздел возвращает следующее:
NON_PRINTABLE = """\r\n\t"""
def parseSQLFile(filename):
with open(filename, 'r') as sqlFile:
allSQL = sqlFile.read()
#filteredSQL = filter(lambda ln: ln in string.printable, allSQL)
# replace specific control characters with spaces to prevent sql compiler errors
for char in NON_PRINTABLE:
allSQL.replace(char,' ')
return allSQL
Я пытался использовать функцию фильтра, переводить и заменять; Тем не менее, я по-прежнему получаю следующие различные результаты из следующего ввода:
Введите:
'select \ n \ ts.id \ n \ t, s.src_cnt \ n \ t, s.out_file \ t \ nfrom \ n \ tkpi_index_ros.composites s \ n \ t, kpi_index_ros.kpi_index_rosoards d \ nwhere \ n \ t1 = 1 \ n \ tand s.kpi_index_rosoard_id (+) = d.id \ n \ tand d.active = 1 \ n; '
Выход 1:
'select \ n s.id \ n, s.src_cnt \ n, s.out_file \ nfrom \ n kpi_index_ros.composites s \ n, kpi_index_ros.kpi_index_rosoards d \ nwhere \ n 1 = 1 \ n и s.kpi_index_rosoard_id (+) = d.id \ n и d.active = 1 \ n; '
Выход 2:
'select \ ts.id \ t, s.src_cnt \ t, s.out_file \ t из \ tkpi_index_ros.composites s \ t, kpi_index_ros.kpi_index_rosoards d, где \ t1 = 1 \ tand s.kpi_index_rosoard_id (+) = d.id \ tand d.active = 1; '
Похоже, он либо заменит вкладки, либо символы новой строки, но не обе. Есть ли способ сделать это эффективным способом?