1. ホーム
  2. python

[解決済み] 複数行の長い文字列を作成するためのPythonicな方法

2022-03-16 17:15:07

質問

非常に長いクエリを持っています。Pythonでそれを数行に分割したいのですが、可能でしょうか?JavaScriptでそれを行う方法は、いくつかの文章を使用し、それらを + 演算子(最も効率的な方法ではないかもしれませんが、この段階では性能はあまり気にせず、コードの読みやすさだけを考えています)を使っています。例を挙げます。

var long_string = 'some text not important. just garbage to' +
                  'illustrate my example';

Pythonで似たようなことをやってみたのですが、うまくいかなかったので \ を使って長い文字列を分割しています。しかし、この方法が唯一/最善/最良の方法であるかどうかはわかりません。見た目もぎこちない。 実際のコードです。

query = 'SELECT action.descr as "action", '\
    'role.id as role_id,'\
    'role.descr as role'\
    'FROM '\
    'public.role_action_def,'\
    'public.role,'\
    'public.record_def, '\
    'public.action'\
    'WHERE role.id = role_action_def.role_id AND'\
    'record_def.id = role_action_def.def_id AND'\
    'action.id = role_action_def.action_id AND'\
    'role_action_def.account_id = ' + account_id + ' AND'\
    'record_def.account_id=' + account_id + ' AND'\
    'def_id=' + def_id

解決方法は?

複数行の文字列のことですか?簡単です、トリプルクォートを使って開始と終了をします。

s = """ this is a very
        long string if I had the
        energy to type more and more ..."""

シングルクォートも使用でき(もちろん最初と最後に3つ)、結果の文字列を処理できます。 s 他の文字列と同じように

ノート : 他の文字列と同様に、開始と終了の引用符の間は文字列の一部となります。また、この文字列には空白と改行が含まれます。

すなわち、、、。

' this is a very\n        long string if I had the\n        energy to type more and more ...'

最後に、Pythonではこんな風に長い行を構成することもできます。

 s = ("this is a very"
      "long string too"
      "for sure ..."
     )

これは ない には余分な空白や改行が含まれます(これは、空白をスキップした場合にどのような影響が出るかを示す意図的な例です)。

'this is a verylong string toofor sure ...'

カンマは不要です。結合する文字列を一対の括弧に入れ、必要な空白と改行を考慮に入れてください。