在我的Python脚本中,我有一个永远如此的SQL语句:
query = """
SELECT * FROM
many_many
tables
WHERE
this = that,
a_bunch_of = other_conditions
"""
将此内容读取为单行的最佳方法是什么?我试过这个:
def formattedQuery(query):
lines = query.split('\n')
for line in lines:
line = line.lstrip()
line = line.rstrip()
return ' '.join(lines)
它确实删除了换行符,但没有删除空格中的空格。请帮忙!
答案 0 :(得分:4)
你可以这样做:
query = " ".join(query.split())
但如果您的SQL查询包含带空格或制表符的字符串(例如select * from users where name = 'Jura X'
),它将无法正常工作。这是使用string.replace
或正则表达式的其他解决方案的问题。所以你的方法不是太糟糕,但你的代码需要修复。
你的功能实际上有什么问题 - 你返回原版,lsplit和rsplit的返回值被放弃了。你可以像这样解决它:
def formattedQuery(query):
lines = query.split('\n')
r = []
for line in lines:
line = line.lstrip()
line = line.rstrip()
r.append(line)
return ' '.join(r)
另一种方法:
def formattedQuery(q): return " ".join([s.strip() for s in q.splitlines()])
答案 1 :(得分:1)
另一行:
>>> import re
>>> re.sub(r'\s', ' ', query)
'SELECT * FROM many_many tables WHERE this = that, a_bunch_of = other_conditions'
这会将字符串query
中的所有空格字符替换为单个' '
空格。
答案 2 :(得分:0)
string.translate可以删除字符(只为第二个参数提供None,因此它也不会转换字符):
import string
string.translate(query, None, "\n\t")