Как сохранить несколько строк txt-файла в одну строку, начиная и останавливаясь на определенных ключевых словах

#python #list #append

Вопрос:

У меня есть хранимая процедура, хранящаяся в виде файла .txt. Я пытаюсь сохранить все «соединения» в файл. Я знаю, как изолировать некоторые соединения, разбив файл txt на строки и прочитав их:

 mylist[]
for line in lines:
     if line.startswith('inner'):
          mylist.append({'join': line})
      
 

Однако проблема возникает в том случае, когда некоторые соединения не находятся в одной строке.
Например:

 inner join tablea a
  on tableb.id = a.id

inner join tablec c
  on tabled.id = c.id

left outer join tabled d
  on tablee.id = d.id
 

Можно ли объединить несколько строк (все строки после первого ключевого слова «внутренний» и перед следующим ключевым словом «внутренний») в одну строку? Делаем что-то похожее на это:

 inner join tablea a on tableb.id = a.id
inner join tablec c on tabled.id = c.id
left outer join tabled d on tablee.id = d.id
etc
 

Я, по общему признанию, новичок, думаю об этом, чтобы найти в txt-файле строки, начинающиеся с ключевых слов, таких как » вкл.», а затем добавить эту строку к строке над ней. Оттуда я могу просто извлечь все строки, которые начинаются либо с «внутреннего», либо с «левого».

Комментарии:

1. Пожалуйста, предоставьте образец, представляющий полный текстовый файл, который у вас есть. Что бы вы сделали для последней inner join строки перед следующей хранимой процедурой?

2. Не называйте список list для начала…

3. Похоже, вам следует искать синтаксический анализатор SQL, а не создавать его самостоятельно, особенно если вы новичок в Python.

Ответ №1:

Это работает:

 a = open("./textFile")

lines = a.readlines()

L = []
for i in range(len(lines)):
     if lines[i].startswith('inner'):
          temp = i   1
          toAdd = lines[i]
          while not lines[temp].startswith("inner") and temp < len(lines)-1:
               toAdd  = lines[temp]

               temp =1

          toAdd = toAdd.replace("n", "")
          L.append({'join': toAdd})

print(L)