Итак, у меня есть файл 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('"', ''))
Любые идеи или предложения? Я не уверен, является ли регулярное выражение лучшим вариантом или есть лучший способ. Спасибо.
@ХуанК AttributeError: type object 'list' has no attribute 'replace'
@glibdud, верно, так и должно было быть re.sub()
. Но, судя по тому, что говорит @TrebledJ, words
теперь список. Не могли бы вы опубликовать, как words
выглядит на вас, пожалуйста?
Мой метод будет примерно таким:
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, чтобы включить сам «)»).
Можно также использовать rfind
, чтобы найти самый правый )
.
words.replace('ROW.*','')
работает?