我正在try 判断输入文件中的字符串,并使用re
来合成模式和解析的输入文件.在这里,输入的是CSV文件与多行的SQL类似的脚本,我想要验证字符串的顺序,首先判断关键字1,然后判断ketword2,然后判断关键字3在输入的CSV文件的每一行.通过这样做,我使用了for
循环,但我觉得肯定有更好的方法来处理这个问题.有没有人建议如何处理这件事?
use case个
CREATE application vat4_xyz_rcc_clm1_trm_soc WITH some text
CREATE flow flow_src_vat4_xyz_rcc_clm1_trm_soc some text
CREATE stream main_stream_vat4_xyz_rcc_clm1_trm_soc with some text
CREATE OR REPLACE target comp_tgt_vat4_xyz_rcc_clm1_trm_soc some text
为了处理这个问题,我try 了以下方法:
kword=['CREATE','CREATE OR REPLACE']
with open('myinput.txt', 'r+') as f:
lines = f.readlines()
nlines = [v for v in lines if not v.isspace()]
for line in nlines:
for string in line:
for word in kword:
if string is word:
atype=next(string)
print('type is', atype) # such as application, flow, stream
if atype in ['application', 'flow', 'steam']:
value=next(atype) ## such as vat4_xyz_rcc_clm1_trm_soc, flow_src_vat4_xyz_rcc_clm1_trm_soc
print("name", value)
else:
print("name not found")
else:
print("type is not correct")
但这样做并不是高效的代码.我认为re
可能会在这里做得很好.有人对此有更好的 idea 吗?
objective:
基本上,我需要分析每一行,如果我发现关键字1,如CREATE
,则判断ketword1旁边的单词,如果NextWord为application
,则打印此行并判断它的下一个单词,我在其中合成了模式,如下所示:
vat4_xyz_rcc_clm1_trm_soc
pat1=r'^[\vat\d+]_(?:xyz|abs)_rcc_[clm\d+]_trm_(?:soc|aws)'
m=re.match(pat1, curStr, re.M)
下面是每条线具有不同模式情况,例如
pat1=r'^[\vat\d+]_(?:xyz|abs)_rcc_[clm\d+]_trm_(?:soc|aws)'
pat2=r'^\flow_src_[\vat\d+]_(?:xyz|abs)_rcc_[clm\d+]_trm_(?:soc|aws)'
pat3=r'^\main_stream_[\vat\d+]_(?:xyz|abs)_rcc_[clm\d+]_trm_(?:soc|aws)'
pat4=r'^\comp_tgt_[\vat\d+]_(?:xyz|abs)_rcc_[clm\d+]_trm_(?:soc|aws)'
我们如何才能使解析每行re
行的操作变得简单?有什么 idea 吗?