12

重複の可能性:
Mac と Windows の Python で \r\n と \n 改行を処理する

私は何かに少し混乱しています。これはpythonのことなのだろうかと思っています。Windows の行末 ("\r\n") を使用するテキスト ファイルがありますが、ファイル内のいくつかの行を反復処理する場合は、それらをリストに保存し、リストの文字列表現をコンソールに出力します。 、「\n」行末を示します。何か不足していますか?

4

3 に答える 3

20

はい、それは python です。デフォルトopen()では、コードが実行されているプラ​​ットフォームに応じて行末が変換されるテキストモードでファイルを開きます。行末を変更せずに渡すように要求するように呼び出しを設定newline=''します。open()

Python 2 の標準open()関数はこのオプションをサポートしておらず、バイナリ モードで開くだけで翻訳が妨げられますが、代わりに を使用することで Python 3 の動作を使用できますio.open()

ドキュメントからopen

newlineユニバーサル改行モードの動作を制御します (テキスト モードにのみ適用されます)。

[...]

  • ストリームから入力を読み取るとき、newlineisの場合None、ユニバーサル改行モードが有効になります。'\n'入力の行は、'\r'、またはで終わることができ、これらは呼び出し元に返される前に に'\r\n'変換されます。'\n'の場合''、ユニバーサル改行モードが有効になりますが、行末は翻訳されずに発信者に返されます。
于 2012-05-28T13:10:31.653 に答える
9

ファイルをバイナリ モードで開くと、Windows 上の Py2 でこれを回避できます。ただし、Py3 (および組み込みの代わりに使用する場合は Py2.6+ io.open) では、バイナリ モードとテキスト モードは明確に定義され、プラットフォームに依存しないものを意味し、ユニバーサル改行には影響しません。代わりに、次のことができます。

file = open(filename, 'r', newline='')

また、改行は正規化されません。

于 2012-05-28T13:57:29.787 に答える
7

あなたがしなければならないことは、普遍的な改行サポート (Python 2.x 用) でファイルを開くことです。これは、「U」または「rU」のモードで行われます。その後、あらゆるタイプの改行がサポートされます。次のドキュメントは、python マニュアルhttp://docs.python.org/library/functions.html#openに記載されています。

標準の fopen() 値に加えて、モードは「U」または「rU」の場合があります。Python は通常、普遍的な改行サポートで構築されています。'U' を指定するとファイルがテキスト ファイルとして開きますが、行は次のいずれかで終了する場合があります: Unix の行末規則 '\n'、Macintosh の規則 '\r'、または Windows の規則 '\ r\n'. これらの外部表現はすべて、Python プログラムによって '\n' として認識されます。Python がユニバーサル改行サポートなしでビルドされている場合、'U' を含むモードは通常のテキスト モードと同じです。そのように開かれたファイルオブジェクトには、None (改行がまだ表示されていない場合)、'\n'、'\r'、'\r\n'、またはすべてを含むタプルの値を持つ newlines と呼ばれる属性もあることに注意してください。見られる改行タイプ。

Python 3 には、改行の動作を制御する open の改行オプションがあります。ドキュメントを見ると、ユニバーサルな改行サポートがデフォルトのようです。

于 2012-05-28T16:13:56.497 に答える