从文件中检索文本块

时间:2014-02-20 00:52:20

标签: python file-io

在一个文件中,我用空行分隔的查询块(可以是一个或多个空行)。有没有更好的方法将查询放入列表?

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())

我正在寻找的结果是一个包含完整查询的列表,而不仅仅是查询的一行。

2 个答案:

答案 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()]