私は何かに少し混乱しています。これはpythonのことなのだろうかと思っています。Windows の行末 ("\r\n") を使用するテキスト ファイルがありますが、ファイル内のいくつかの行を反復処理する場合は、それらをリストに保存し、リストの文字列表現をコンソールに出力します。 、「\n」行末を示します。何か不足していますか?
3 に答える
はい、それは python です。デフォルトopen()
では、コードが実行されているプラットフォームに応じて行末が変換されるテキストモードでファイルを開きます。行末を変更せずに渡すように要求するように呼び出しを設定newline=''
します。open()
Python 2 の標準open()
関数はこのオプションをサポートしておらず、バイナリ モードで開くだけで翻訳が妨げられますが、代わりに を使用することで Python 3 の動作を使用できますio.open()
。
newline
ユニバーサル改行モードの動作を制御します (テキスト モードにのみ適用されます)。[...]
- ストリームから入力を読み取るとき、
newline
isの場合None
、ユニバーサル改行モードが有効になります。'\n'
入力の行は、'\r'
、またはで終わることができ、これらは呼び出し元に返される前に に'\r\n'
変換されます。'\n'
の場合''
、ユニバーサル改行モードが有効になりますが、行末は翻訳されずに発信者に返されます。
ファイルをバイナリ モードで開くと、Windows 上の Py2 でこれを回避できます。ただし、Py3 (および組み込みの代わりに使用する場合は Py2.6+ io.open
) では、バイナリ モードとテキスト モードは明確に定義され、プラットフォームに依存しないものを意味し、ユニバーサル改行には影響しません。代わりに、次のことができます。
file = open(filename, 'r', newline='')
また、改行は正規化されません。
あなたがしなければならないことは、普遍的な改行サポート (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 の改行オプションがあります。ドキュメントを見ると、ユニバーサルな改行サポートがデフォルトのようです。