#python #sql #regex #parsing
#python #sql #регулярное выражение #синтаксический анализ
Вопрос:
У меня есть данные, содержащие имя таблицы базы данных.
с помощью такого кода:
for l,col in enumerate(data):
#print(data[l][1])
a = data[l][1]
parse = extract_tables(a)
print(parse)
данные выглядят следующим образом:
['public.actor']
['public.film']
['film']
['film', 'rental', 'inventory']
['inventory i', 'customer c', 'film f', 'rental r']
['customer as c', 'rental as r']
я хочу, чтобы это было так:
['actor']
['film']
['film']
['film', 'rental', 'inventory']
['inventory', 'customer', 'film', 'rental']
['customer', 'rental']
я хочу удалить «общедоступные», «as», а также псевдонимы типа «c», «f» и «r», чтобы я получал только исходную таблицу имен из данных. (например, актер, фильм, прокат).
я работаю на python. пожалуйста, помогите мне. Спасибо
Комментарии:
1. Пожалуйста, исправьте свой отступ.
Ответ №1:
Если ваши единственные случаи — удалить public.
и as x
из ваших входных данных, вы можете использовать
re.sub("(public.|sas. )", "", input_string)
Ответ №2:
def clean(string):
p = string.split()
if len(p) == 1:
return p[0].split('.')[-1]
else:
return p[0]
Комментарии:
1. Здравствуйте. Вам также необходимо добавить некоторые пояснения к вашему ответу. Вы можете написать о том, какую ошибку допустил ОП или что он / она пропустил.
Ответ №3:
Знаете ли вы набор ожидаемых возможных имен таблиц базы данных? Похоже, вы могли бы или могли бы запросить его из базы данных. Если это так:
database_tables = ['actor', 'film', 'rental', 'inventory', 'customer']
results = []
for db_list in data:
db_list = [db for db in database_tables if db in ''.join(db_list)]
results.append(db_list)
Если вы этого не сделаете, ваше решение будет таким же хорошим, как предсказуемость очистки входящих данных. С помощью набора, который у вас есть:
result = []
for db_list in data:
db_list = [db.split('public.')[0] for db in db_list]
db_list = [db.split(' ')[0] for db in db_list]
result.append(db_list)