web-dev-qa-db-fra.com

Python readline avec délimiteur personnalisé

novice ici. J'essaie de lire les lignes d'un fichier, cependant une seule ligne dans un .txt le fichier a un \n au milieu quelque part et en essayant de lire cette ligne avec .readline python le coupe au milieu et le produit sur deux lignes.

  • lorsque je copie et passe la ligne dans cette fenêtre, elle apparaît comme deux lignes. J'ai donc téléchargé le fichier ici: https://ufile.io/npt3n

  • également ajouté une capture d'écran du fichier tel qu'il apparaît dans le fichier txt.

  • il s'agit de l'historique de discussion de groupe exporté de Whatsup..si vous vous demandez.
  • S'il vous plaît, aidez-moi à lire une ligne complètement comme indiqué dans le fichier txt.

.

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

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

f.close()

enter image description here

6
hgv

Python 3 vous permet de définir quelle est la nouvelle ligne pour un fichier particulier. Il est rarement utilisé, car le mode par défaut newlines universels est très tolérant:

Lors de la lecture des entrées du flux, si le retour à la ligne est Aucun, le mode de retour à la ligne universel est activé. Les lignes dans l'entrée peuvent se terminer par '\ n', '\ r' ou '\ r\n', et celles-ci sont traduites en '\ n' avant d'être renvoyées à l'appelant.

Donc, ici, vous devez préciser que seul "\ r\n" est une fin de ligne:

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

Au lieu d'utiliser la fonction readline, vous pouvez lire tout le contenu et diviser les lignes par regex:

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])]

Si tout le contenu a le même début, vous pouvez [...] le séparer, puis nettoyer toutes les parties en omettant les éléments "". Ensuite, vous pouvez joindre chaque partie avec la fonction Zip ( https://stackoverflow.com/a/5851033/1038301 )

1
Roomm