在一个文件中,我用空行分隔的查询块(可以是一个或多个空行)。有没有更好的方法将查询放入列表?
Ex文件:
select * from tbA
where colA= '2'
select * from tbB
where colB = 'c'
order by colc
select * from tbC
我到目前为止的代码:
queries = list()
with open(sql_file_path, 'rb') as f:
lines = f.readlines()
i = 0
while i < len(lines):
query = ''
while i < len(lines) and not lines[i].isspace():
query += lines[i]
i += 1
while i < len(lines) and lines[i].isspace():
i += 1
queries.append(query.strip())
我正在寻找的结果是一个包含完整查询的列表,而不仅仅是查询的一行。
答案 0 :(得分:1)
with open(path) as f:
lines = [line.strip() for line in f if line]
list comp将逐行遍历您的文件,如果该行不为空,则将其构建到列表中。如果它是空白的,它将忽略它。
根据您编辑的文字,只需分成一个空行(即\n\n
)。
with open(path) as f:
lines = [query for query in f.read().split("\n\n") if query]
您也可以通过正则表达式执行此操作:
import re
with open(path) as f:
queries = re.split(r"\n\n+",f.read())
答案 1 :(得分:0)
queries = [query.strip() for query in re.split(r"(\r\n)(\r\n)+", all_text, ) if query.strip()]