47

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()の実行はオプションのようです。そのままにしておく方がいいですか?

4

5 に答える 5

64

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

.strip()引数なしで(または最初の引数として) 、スペース、タブ、改行、改行を含む、開始と終了のすべてのNone空白を削除します。そのままにしておくことは害を及ぼすことはなく、プログラムがファイルに挿入された予期しない余分な空白を処理できるようにします。

たとえば、を使用する.strip()と、ファイル内の次の2行で同じ最終結果が得られます。

 foo\tbar \n
foo\tbar\n

私はそれを残しておくと思います。

于 2012-10-22T14:40:31.477 に答える
14

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

"foo\tbar "

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

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

line.strip().split()

常に次と同じです:

line.split()

しかし:

line.strip().split(delimiter)

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

line.split(delimiter)
于 2012-10-22T14:40:44.207 に答える
9

strip文字列の空白を削除するだけです。弦の前後から余分なホワイトペースを取り除きたい場合は、ストリップを使用できます。

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

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

を参照してください。分割した後でも\t、コードのストリップを使用して削除できる1番目と2番目の項目に余分な空白があります。

于 2012-10-22T14:43:05.730 に答える
1

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

strip()がないと、空のキーと値を持つことができます。

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

strip()がない場合、バナナはディクショナリに存在しますが、値として空の文字列があります。strip()を使用すると、バナナの行のタブが削除されるため、このコードは例外をスローします。

于 2012-10-22T14:41:17.893 に答える
0

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

于 2012-10-22T14:40:46.030 に答える