2017-08-21 10 views
1
code=""" 
[--] 
{start} 
\ok\ 
"waw" 
the-end 
""" 
for i in code.split('\n') : 
    print i 

Result: 

[--] 
{start} 
\ok"waw" 
the-end 

ユーザーが入力したコードにアクセスすることはできません。 \ ok \の終わりにある '\'は私に間違った結果を与えます。どのように私は正しく()分割することができますか?行または行の末尾に ''があると、split()エラーが発生する

+0

'\ n'は改行に使用されますが、okの後に '\'が出現すると、エスケープされ、改行が見付かりません。 – 0decimal0

+0

入力を与えるために実際のスクリプトを変更するのですか? –

+0

'\ n'の代わりに' os.linesep'を使用してください – 0decimal0

答えて

1

問題のコメントで述べたように、実際codeの値が既に

[--] 
{start} 
\ok"waw" 
the-end 
あなたが参照できる

あるので、改行が続く\\の文字列リテラルは、その改行をエスケープすること、ですthis Pythonの文字列リテラルに関するいくつかの情報があります。

ok"waw"の間に改行がありません。この問題は実際にはあなたのコードではなく、サンプル入力にあります。ユーザーが「コード」にアクセスすることができないと言います。ユーザーがプログラムを変更して入力するとは限りません。入力を取る方法の私の提案は、ユーザーに別々のファイルを提供させることです。このようにして、文字列は文字列として解釈され、それだけで解釈され、Pythonはエスケープを試みません。わかりやすくするために、私はファイル名をハードコードしましたが、最終的にこれを柔軟にする(実際にはstdinから入力して、ユーザーがファイル名を提供できるようにするなど)良い考えです。

ファイルinput.txtは含まれています

[--] 
{start} 
\ok\ 
"waw" 
the-end 

コード:

import sys 
with open("input.txt", "r") as in_file: 
    for line in in_file: 
     sys.stdout.write(line) 

予想したように、コードが

[--] 
{start} 
\ok\ 
"waw" 
the-end 

をouputsおそらくあなたはラインでいくつかのより多くをしたいです、これは単に入力を複製したものです。

関連する問題