基本上,我有一个Hive脚本文件,我需要从中提取所有创建的表的名称。例如,从内容
...
create table Sales ...
...
create external table Persons ...
...
应提取 Sales
和Persons
。要做到这一点,我的基本想法是:
create table
和create external table
,但是,输入可能不是规范的。例如,
create TABLE
因此,我正在考虑在应用基本算法之前首先将输入规范化为规范形式。然后经过一番努力,我想出了以下内容
' '.join(input.split()).lower()
作为一个Python新手,我想知道这是否是Pythonic解决问题的方法,或者它可能在一开始就存在缺陷?是否有一种简单的方法以流式方式执行此操作,即避免一次将整个输入加载到内存中?
答案 0 :(得分:1)
正如一些评论所说,正则表达式是一种简洁明了的方式来获得你想要的东西。如果您不介意获得小写结果,那么这个应该可以工作:
import re
my_str = """
...
create table Sales ...
create TabLE
test
create external table Persons ...
...
"""
pattern = r"table\s+(\w+)\b"
items = re.findall(pattern, my_str.lower())
print items
它捕获了" table"之后的下一个单词。 (后面跟着至少一个空格/换行符。)
获取表名的原始案例:
for x, item in enumerate(items):
i = my_str.lower().index(item)
items[x] = my_str[i:i+len(item)]
print items