8

だから私はfile.txtを持っています:

>>012345
>> (new line)

私が電話するとき:

b=a.read(7)
print b

これは私に与えます

 012345
 (with a newline here)

したがって、「\ n」を1文字として数えて、次の7文字を読み取ったことがわかります。しかし、seekを使用すると、「\n」は2文字として扱われるようです。

position = a.seek(-2,2)
b=a.read(1)
print b

これにより、5ではなく新しい空白行が出力されます。

これらの2つの方法は、「」の扱い\nが異なりますか?

4

2 に答える 2

10

Pythonは、デフォルトでファイルをテキストモードで開きます。テキストモードで開いているファイルには、プラットフォーム固有の改行規則が\n自動的に変換されます。

\r\nおそらくWindowsで、改行規則を使用してファイルを開きました。

この変換を実行したくない場合は、ファイルをバイナリモードで開きます。open()詳細については、関数のドキュメントを参照してください。

デフォルトでは、テキストモードを使用します。これ'\n'により、書き込み時に文字がプラットフォーム固有の表現に変換され、読み取り時に文字が戻される場合があります。したがって、バイナリファイル'b'を開くときは、モード値に追加してファイルをバイナリモードで開く必要があります。これにより、移植性が向上します。

于 2013-03-24T17:44:16.127 に答える
0

これに自分で対処する必要はありません。Pythonには電池が含まれています。:-)

改行が気になる場合は、read()ファイル全体だけを使用してsplitlines()、文字列のメソッドを使用してください。

In [21]: test = 'foo \nbar bla\n baz\r\n'

In [22]: test.splitlines()
Out[22]: ['foo ', 'bar bla', ' baz']

これにより、行末の空白のみが削除されることに注意してください。

于 2013-03-24T17:54:47.967 に答える