Как удалить текст после заданного ограничения? - PullRequest
1 голос
/ 28 мая 2019

Итак, у меня есть файл SQL со следующим содержимым:

createtab_stmt
CREATE EXTERNAL TABLE `table1`(
"  `name_id` bigint, "
"  `address_id` string, "
"  `full_name` bigint, "
  `insert_timestamp` timestamp)
ROW FORMAT SERDE 
  'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' 

** Я пытаюсь удалить весь текст, который идет после) от третьего до последнего предложения («отметка времени)»). Таким образом, вывод должен быть все до строки формата serde:

createtab_stmt
    CREATE EXTERNAL TABLE `table1`(
    "  `name_id` bigint, "
    "  `address_id` string, "
    "  `full_name` bigint, "
      `insert_timestamp` timestamp)

Это мой существующий код:

import re
f = open("/home/dir2/ddl", 'rt', encoding='latin-1')
words=f.readlines()

with open("/home/dir1/sampl7.sql","w") as output:
    for i in words:
        output.write(i.replace('"', ''))

Есть идеи или предложения? Я не уверен, является ли регулярное выражение лучшим вариантом или есть лучший способ. Спасибо.

1 Ответ

3 голосов
/ 28 мая 2019

Мой метод будет примерно таким:

f = open("/home/dir2/ddl", 'rt', encoding='latin-1')
source=f.read()

with open("/home/dir1/sampl7.sql","w") as output:
    output.write(source[:source.find(')')+1].replace('"', ''))

.find() найдет индекс символа ')', и мы будем использовать его, чтобы получить строку от символа 0 до этого индекса (+ 1 для включения самого символа ').

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...