2

ファイル abc の内容:

a
b
c

コードは

data_fh = open("abc")
str = data_fh.read()
arr = str.split("\n")
print len(arr)
data_fh.seek(0)
arr = data_fh.read().splitlines()
print len(arr)

しかし、出力は次のとおりです。

4
3

それで、それはなぜですか?

4

2 に答える 2

5

.splitlines()最後に空の行が含まれていないため、while.split('\n')は最後の空の文字列を返します...\n

>>> 'last\n'.split('\n')
['last', '']
>>> 'last\n'.splitlines()
['last']

これはstr.splitlines()ドキュメントで明示的に言及されています:

split()区切り文字列sepが指定された場合とは異なり、このメソッドは空の文字列に対して空のリストを返し、終端の改行は余分な行にはなりません。

末尾に改行がない場合、出力は同じです。

>>> 'last'.split('\n')
['last']
>>> 'last'.splitlines()
['last']

つまり、何もstr.split()追加しませんが、削除します。str.splitlines()

于 2013-08-08T14:13:51.987 に答える
4

末尾に改行がある可能性があります。

>>> s = 'a\nb\nc\n'  # <-- notice the \n at the end
>>>
>>> s.split('\n')
['a', 'b', 'c', '']
>>>
>>> s.splitlines()
['a', 'b', 'c']

split()最後に空の文字列が残ることに注意してくださいsplitlines()

余談ですが、組み込み関数strによって既に使用されているため、変数名として使用しないでください。

于 2013-08-08T14:13:44.950 に答える