web-dev-qa-db-ja.com

Pythonカスタム区切り文字付きのreadline

ここの初心者。ファイルから行を読み込もうとしていますが、.txtファイルには\n途中のどこかで、その行を.readline python=で読み取ろうとすると、途中で切り取られ、2行として出力されます。

  • このウィンドウに行をコピーして貼り付けると、2行で表示されます。だから私はここにファイルをアップロードしました: https://ufile.io/npt3n

  • また、txtファイルに表示されるファイルのスクリーンショットを追加しました。

  • これは、Whatsup ..からエクスポートされたグループチャットの履歴です。
  • Txtファイルに示されているように、1行を完全に読み取るのを手伝ってください。

f= open("f.txt",mode='r',encoding='utf8')

for i in range(4):
    lineText=f.readline()
    print(lineText)

f.close()

enter image description here

8
hgv

Python 3では、特定のファイルの改行を定義できます。デフォルトのniversal newlinesモードは非常に寛容であるため、ほとんど使用されません。

ストリームから入力を読み取るときに、改行がNoneの場合、ユニバーサル改行モードが有効になります。入力の行は「\ n」、「\ r」、または「\ r\n」で終わることができ、これらは呼び出し元に返される前に「\ n」に変換されます。

したがって、ここでは '\ r\n'のみが行末であることを明示する必要があります。

f= open("f.txt",mode='r',encoding='utf8', newline='\r\n')

# use enumerate to show that second line is read as a whole
for i, line in enumerate(fd):   
    print(i, line)
9
Serge Ballesta

Readline関数を使用する代わりに、正規表現でコンテンツ全体を読み、行を分割できます。

import re

with open("txt", "r") as f:
    content = f.read()
    # remove end line characters
    content = content.replace("\n", "")
    # split by lines
    lines = re.compile("(\[[0-9//, :\]]+)").split(content)
    # clean "" elements
    lines = [x for x in lines if x != ""]
# join by pairs
lines = [i + j for i, j in Zip(lines[::2], lines[1::2])]

すべてのコンテンツが同じ開始[...]である場合、これで分割でき、「」要素を省略してすべての部分をクリーンアップします。次に、各部分をZip関数で結合できます( https://stackoverflow.com/a/5851033/1038301

1
Roomm