1

私のPythonスクリプトには、次のように永遠に続くSQLステートメントがあります。

query = """
    SELECT * FROM
        many_many
        tables
    WHERE
        this = that,
        a_bunch_of = other_conditions
"""

これを1行のように読むための最良の方法は何ですか?私はこれを試しました:

def formattedQuery(query):
    lines = query.split('\n')

    for line in lines:
        line = line.lstrip()
        line = line.rstrip()

    return ' '.join(lines)

インデントから改行は削除されましたが、スペースは削除されませんでした。助けてください!

4

3 に答える 3

5

あなたはこれを行うことができます:

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()])
于 2013-02-07T20:27:25.457 に答える
2

別の1行:

>>> import re

>>> re.sub(r'\s', ' ', query)

'SELECT * FROM many_many tables WHERE this = that, a_bunch_of = other_conditions'

これにより、文字列内のすべての空白文字がquery単一の空白に置き換えられ' 'ます。

于 2013-02-07T20:34:34.987 に答える
0

string.translateは文字を削除できます(2番目の引数にNoneを指定するだけなので、文字も変換されません):

import string
string.translate(query, None, "\n\t")
于 2013-02-07T20:33:26.923 に答える