2017-12-17 8 views
-1

IDLEでシェルに文字列を取得しようとしています。それには、私が削除したい非アスキー文字がいくつか含まれています。私はそれを複数行の文字列に貼り付けることはできません。非ASCII文字のストリップ複数行文字列

u'''✔uganda 
✔zambia 
✔zimbabwe 
and none of these… 
✕afghanistan 
✕armenia 
✕azerbaijan''' 

それは私に次のエラー与えるので:

Unsupported characters in input 

を、文字列が複数の行幅であるので、私は

string = [raw_]input() 

を使用することはできません。


どのように文字列をシェルに入れることができますか?

+0

私はコメントを残さずにdownvotingは生産的ではないと言います。 – micsthepick

答えて

0

stringをこのように定義することができない場合は、inputが必要です。これは、multi-lineの入力を受け入れるためのコードが必要で、各行を読むときに、各文字のord()256(つまり、ASCIIのセット)未満であることを確認します。ここで

は、コードと言われている。

inpt = ''.join(c for c in input() if ord(c) < 256) 
while True: 
    s = ''.join(c for c in input() if ord(c) < 256) 
    if s: 
     inpt += "\n" + s 
    else: 
     break 

、これは動作します:

✔uganda 
✔zambia 
✔zimbabwe 
and none of these… 
✕afghanistan 
✕armenia 
✕azerbaijan 

>>> inpt 
'uganda\nzambia\nzimbabwe\nand none of these\nafghanistan\narmenia\nazerbaijan' 
>>> print(inpt)  
uganda 
zambia 
zimbabwe 
and none of these 
afghanistan 
armenia 
azerbaijan 
+0

空文字列としてinptを初期化していないので、これはシェルで使用するのが難しい – micsthepick

+0

@micsthepick文字列の先頭に改行を追加する前に解決策を編集していましたが、現在の解決策あなたのために働いていない、あなたは実際にスクリプトを作成し、それを実行することができます... –

+0

は、常に可能性はありません – micsthepick

0

あなたがセッションに格納されたデータを持っているだけでスクリプトを実行できない場合は、あなただけの実行可能性フル入力でコピーする入力ループ。

コード:

inp = "" 


for line in iter(input, “”): 
     inp += line 
0

は、スクリプトでそれを定義します。ファイルを新規作成し、次に:

#!coding:utf8 
s = u'''✔uganda 
✔zambia 
✔zimbabwe 
and none of these… 
✕afghanistan 
✕armenia 
✕azerbaijan''' 
print s 

これを保存して、F5キーを押してIDLEシェルで実行します。出力:

また、最新のPythonにswithしてください。 3.6のアイドルはうまく動作します:

>>> s='''\ 
✔uganda 
✔zambia 
✔zimbabwe 
and none of these… 
✕afghanistan 
✕armenia 
✕azerbaijan''' 
>>> print(s) 
✔uganda 
✔zambia 
✔zimbabwe 
and none of these… 
✕afghanistan 
✕armenia 
✕azerbaijan