Python readlines()が余分な' \ n'を生成するのはなぜですかテキストファイルを読み取るときに行の間にありますか?


ベストアンサー

バカだから。この「機能」の便利なアプリケーションを思いつかず、一生懸命努力しました。

(Romainの回答を参照してください。 「なぜ正確に」という真剣なアプローチ、私はただ炎上する必要があります:-)いくつかの回避策を提供できますが、)

もう1つのパラメータ(つまり、デフォルトの「終了」)を受け入れないのはなぜですか「\ n」、またはブールフラグ、keepnl = True)に変更すると、行末が必要な場合にのみ、行末を保持/変更することを選択できます。

これは直感的でない「ポリシー決定」により、実際には使用できなくなり、理解が遅くて難しいのではなく、次のようになります。

lines = [ ln[:-1] for ln in f.readlines() ]

通常は

/ p>

lines = f.read().split("\n")

私の目にははるかに簡単です。今すぐ変更するには遅すぎると思います。

はい、OSによっては、他の行末になる可能性があります。

Pythonの標準ライブラリにも欠陥があると思います。

回答

これらの文字は ではありません エクストラ。それらはテキストファイルに存在します。行の終わりを示します。

sample.txtと呼ばれるテキストファイルを読み取る別の方法があります。

>>> with open("sample.txt") as sample:

... contents = sample.readlines()

... print(contents)

...

["This is line number 1\n", "This is line number 2\n", "This is line number 3\n", "This is line number 4\n", "This is line number 5\n", "This is line number 6\n", "This is line number 7\n", "This is line number 8\n", "This is line number 9\n", "This is line number 10\n", "This is line number 11\n", "This is line number 12\n", "This is line number 13\n", "This is line number 14\n", "This is line number 15\n", "This is line number 16\n", "This is line number 17\n", "This is line number 18\n", "This is line number 19\n", "This is line number 20\n"]

  • 印刷された各行出力は\nで終わります。これは、テキストファイルの行にあるためです。
  • with このコンストラクトは使用後にファイルを閉じるように調整されているため、ファイルを開くとき。
  • ファイルをfileと呼んでいることに気付きました。 Python言語の一部である名前の使用は避けてください。

新しい行を削除するコードが必要な場合は、次の1つのオプションがあります。

>>> with open("sample.txt") as sample:

... for line in sample:

... print(line.rstrip())

...

This is line number 1

This is line number 2

This is line number 3

This is line number 4

This is line number 5

This is line number 6

This is line number 7

This is line number 8

This is line number 9

This is line number 10

This is line number 11

This is line number 12

This is line number 13

This is line number 14

This is line number 15

This is line number 16

This is line number 17

This is line number 18

This is line number 19

This is line number 20

注t文字列の右端のみから空白文字を削除するrstripを使用しました。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です