2017-06-26 3 views
0

これらの2つの異なる文字列補間スタンザを指定すると、いずれも機能しません。どちらも{n}と%(テキスト)の挿入を出力にプレーンな生のテキストとして返します。私は何が欠けていますか?python3文字列補間 - どちらの方法も動作しません

アイブは現在のpython 3

bulk_string = (
    "bulk insert SomeDB.dbo.%(lru)s\n" + 
    "from 'C:\\Someplace\\" 
    "project\\%(filename)s'\n" + 
    "with (\n" + 
    " FIELDTERMINATOR = ',',\n" + 
    " ROWTERMINATOR = '%(term)s'\n" + 
    ");" 
    % { 
     'lru': lru, 
     'filename': filename, 
     'term' : "\n" 
    } 
) 

とへの移植、python2に永遠の方法(文字列)%を使用して:

bulk_string = (
    "bulk insert SomeDB.dbo.{0}\n" + 
    "from 'C:\\Someplace\\" 
    "project\\{1}'\n" + 
    "with (\n" + 
    " FIELDTERMINATOR = ',',\n" + 
    " ROWTERMINATOR = '{2}'\n" + 
    ");" 
    .format(lru, filename, "\n") 
) 

答えて

1

formatまたは%のみに適用されるいずれか追加した文字列の最後の文字列。あなたは"""(トリプル引用符で囲まれた文字列)を使用するか、または(誤っあなたがやった、ということはなく、)の文字列を括弧できます脇

bulk_string = r"""bulk insert SomeDB.dbo.{} 
from 'C:\Someplace\project\{}' 
with (
    FIELDTERMINATOR = ',', 
    ROWTERMINATOR = '{}' 
    );""".format(lru, filename, "\\n") 

bulk_string = (
    "bulk insert SomeDB.dbo.{0}\n" + 
    "from 'C:\\Someplace\\" 
    "project\\{1}'\n" + 
    "with (\n" + 
    " FIELDTERMINATOR = ',',\n" + 
    " ROWTERMINATOR = '{2}'\n" + 
    ");") 
    .format(lru, filename, "\\n") 

またはトリプルクォート/生の文字列/自動フォーマットpositionningと

:コード内に \nという文字列を生成する場合は、 formatの3番目のパラメータは \\nまたはr \nにする必要があります。

+0

上記の最初のスタンザでは、間違った閉じ括弧がありました。私は2.7のコードに戻って見ていましたが、上記の最初のスタンザ(%(string)sメソッド付き)はすべてのプラス記号を省略するとうまくいきます。そして、次の%{}補間が適用されます全部... – Omortis

+0

あなたは 'format'にdictを渡すことができ、' {lru} '...をプレースホルダとして使うことに注意してください。 –