如何从Python中的字符串中删除换行符和缩进?

时间:2013-02-07 20:25:08

标签: python string

在我的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)

它确实删除了换行符,但没有删除空格中的空格。请帮忙!

3 个答案:

答案 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")