web-dev-qa-db-ja.com

PythonのString.strip()

Pythonについて学びながら、テキストファイルを受け取り、各行を配列に分割し、カスタム辞書に挿入する次のコードを見つけました。ここで、array [0]はキー、array [1]は値です。

my_dict = {}

infile = open("file.txt")
for line in infile:
    #line = line.strip() 
    #parts = [p.strip() for p in line.split("\t")]
    parts = [p for p in line.split("\t")]
    my_dict[parts[0]] = parts[1]
    print line

for key in my_dict:
    print "key: " + key + "\t" + "value " + my_dict[key]

コメント行をオフにしてオンにしてプログラムを実行すると、同じ結果が得られました。 (もちろん、2番目のコメント行をその下の行に置き換えます。)strip()の実行はオプションのようです。そのままにしておく方が良いでしょうか?

43
Rhs

コードをコメントアウトでき、プログラムが引き続き機能する場合、はい、そのコードはオプションでした。

.strip()引数なし(または最初の引数としてNone)は、スペース、タブ、改行、復帰を含む開始と終了のall空白を削除します。そのままにしておいても問題はありません。ファイルに挿入された予期しない余分な空白をプログラムで処理できます。

たとえば、.strip()を使用すると、ファイル内の次の2行は同じ結果になります。

 foo\tbar \n
foo\tbar\n

そのままにしておきます。

62
Martijn Pieters

この場合、いくつかの違いが生じる可能性があります。次のような行を考えます。

"foo\tbar "

この場合、stripを指定すると、{"foo":"bar"}が辞書エントリとして取得されます。ストリップしないと、{"foo":"bar "}が得られます(最後に余分なスペースがあることに注意してください)

line.split()の代わりにline.split('\t')を使用すると、空白文字ごとに分割され、分割中に「striping」が自動的に行われることに注意してください。言い換えると:

line.strip().split()

常にと同じ:

line.split()

しかし:

line.strip().split(delimiter)

必ずしも以下と同等ではありません:

line.split(delimiter)
13
mgilson

stripは何もしませんが、文字列の空白を削除します。文字列の前後から余分なホワイトペースを削除する場合は、ストリップを使用できます。

これを説明できる文字列の例は次のとおりです。

In [2]: x = "something \t like     \t this"
In [4]: x.split('\t')
Out[4]: ['something ', ' like     ', ' this']

\tで分割した後でも、コードのstripを使用して削除できる余分な空白が1番目と2番目のアイテムにあります。

8
Senthil Kumaran

stripは、文字列の先頭と末尾から空白を削除します。空白が必要な場合は、stripを呼び出さないでください。

0
zmbq

いいえ、それらを除外することをお勧めします。

Strip()がなければ、空のキーと値を持つことができます:

apples<tab>round, fruity things
oranges<tab>round, fruity things
bananas<tab>

Strip()を使用しない場合、辞書にはバナナが存在しますが、値として空の文字列が含まれます。 strip()を使用すると、このコードはバナナ行のタブを削除するため、例外をスローします。

0
Sjoerd