2017-11-24 25 views
1

私は本当になぜこれがうまくいかないのか困惑しています。私がしたいのは、ファイルから読み込んだコンテンツからzwsp(u200b)と改行と余分なスペースを削除するだけです。Python 3:u200b(zwsp)と改行( n)とスペースの削除 - リスト操作の連鎖?

最終的に、私はこれを新しいファイルに書き出したいと思います。これは機能していますが、目的のフォーマットではありません。

マイ入力(それにzwsp/u200bを有する短いテストファイルは、)以下からなる:

Australia 1975 
    ​Adelaide ​ 2006 ​ 23,500 
    Brisbane (Logan)  2006 29,700 
    ​Brisbane II (North Lakes) ​ 2016 ​ 29,000 

Austria 1977 
    Graz  1989 26,100 
    Innsbruck 2000 16,000 
    Klagenfurt 2008 27,000 

私のコードは次のようである:

input_file = open('/home/me/python/info.txt', 'r') 
file_content = input_file.read() 
input_file.close() 

output_nospace = file_content.replace('\u200b' or '\n' or ' ', '') 

print(output_nospace) 

f = open('nospace_u200b.txt', 'w') 
f.write(output_nospace) 
f.close() 

しかし、このdoesnのが私が期待するように働かない。

u200bは削除されますが、改行やスペースは削除されません。私は、スクリプトの一部として生成された出力ファイルをチェックすることによって、u200bがないかどうかをテストする必要があります。

操作の1つを削除すると、そのような/ u200b、:

output_nospace = file_content.replace('\n' or ' ', '') 

...そして案の定結果のファイルは、改行やスペースなしですが、期待通りu200bが残ります。このポストの一番上に書かれているオリジナルに戻してください。u200b、改行、スペースは削除されません。

誰も私がここで間違っていることをアドバイスできますか?このようなチェーン操作を連鎖できますか?これをどのように機能させることができますか?

ありがとうございました。

答えて

0

@twotwotwoで示されるように、以下の.replaceチェーンの実装はこの問題を解決します。

output_nospace = \ 
file_content.replace('\u200b', '').replace('\n', '').replace(' ', '') 

正しい方向に私を指摘してくれてありがとう。 :)

1

"aまたはbまたはc"のようなコードの結果は、Pythonではfalseとはみなされないa、b、またはcの最初のものにすぎません(None、0、 ""、[]、False)。いくつかの偽の値)。この場合、結果は最初の値、つまりzwsp文字になります。これは、aまたはbまたはcを ''で置き換えようとしている置換関数には通じません。置換コードには 'または'を使用したことは通知されません。このような置換えをチェーンすることはできますが、s.replace( 'a'、 '').replace( 'b'、 '').replace( 'c'、 '')。 (置換は文字列操作であり、ここではリスト操作ではありません。)

この質問に基づいて、learnpython.orgのようなチュートリアルをお勧めします。 Pythonや他のプログラミング言語の文は、人間が文章を書いた文とは、あなたが始めているときにあなたを混乱させるようなやり方で異なっています。

+0

ありがとう!私はあなたの提案を試み、読んでフォローアップします。 –

関連する問題