OVH Cloud OVH Cloud

retour chariot dans fichier texte

4 réponses
Avatar
ownowl
bonjour à tous

débutant sous python, j'ai un petit problème pour lire un fichier text
qui comporte des retours chariots (\n x0A) en dehors des fins de ligne

lorsque je lis le fichier squentiellement par readline(), les \n sont
pris en compte et mes lignes ne sont pas complètes

Les "vrai" fin de lignes finissent par x0Dx0A, donc j'ai fait :
all = fichier.read()
sp = str(all).split("\n")
for st in sp:
print st

ca split bien à \n , mais ca split aussi ou il y en a pas besoin
j'ai essayé
- avec \r : ca split rien, mais c'est peu etre la fonction str() qui
supprime le CR
- avec \x0A : ca split rien, la c'est bizare, car à priori c'est parail
que \n

donc la question est comment extraire les lignes d'un fichier texte,
uniquement en prenant en compte les caractères ascii x0Dx0A ?


Olivier

4 réponses

Avatar
Pierre Quentel
bonjour à tous

débutant sous python, j'ai un petit problème pour lire un fichier text
qui comporte des retours chariots (n x0A) en dehors des fins de ligne

lorsque je lis le fichier squentiellement par readline(), les n sont
pris en compte et mes lignes ne sont pas complètes

Les "vrai" fin de lignes finissent par x0Dx0A, donc j'ai fait :
all = fichier.read()
sp = str(all).split("n")
for st in sp:
print st

ca split bien à n , mais ca split aussi ou il y en a pas besoin
j'ai essayé
- avec r : ca split rien, mais c'est peu etre la fonction str() qui
supprime le CR
- avec x0A : ca split rien, la c'est bizare, car à priori c'est parail
que n

donc la question est comment extraire les lignes d'un fichier texte,
uniquement en prenant en compte les caractères ascii x0Dx0A ?


Olivier


Essaye avec 'rn' :

all = fichier.read()
sp = all.split('rn')
for st in sp:
print st

Pierre

Avatar
Christophe Cavalaria
ownowl wrote:

bonjour à tous

débutant sous python, j'ai un petit problème pour lire un fichier text
qui comporte des retours chariots (n x0A) en dehors des fins de ligne

lorsque je lis le fichier squentiellement par readline(), les n sont
pris en compte et mes lignes ne sont pas complètes

Les "vrai" fin de lignes finissent par x0Dx0A, donc j'ai fait :
all = fichier.read()
sp = str(all).split("n")
for st in sp:
print st

ca split bien à n , mais ca split aussi ou il y en a pas besoin
j'ai essayé
- avec r : ca split rien, mais c'est peu etre la fonction str() qui
supprime le CR
- avec x0A : ca split rien, la c'est bizare, car à priori c'est parail
que n

donc la question est comment extraire les lignes d'un fichier texte,
uniquement en prenant en compte les caractères ascii x0Dx0A ?


Olivier


Quand tu ouvres un fichier en mode texte sous Windows, toutes les "fausses"
fin de lignes 0x0D,0x0A sont remplacées par les vraies fin de lignes 'n'

str(all) ne fait rien car fichier.read() renvoye déjà un objet du type str.

Dans tous les cas, vérifie comment tu as ouvert ton fichier texte et passe
le en binaire si tu veux avoir un parfait controle sur le traitement des
retour à la ligne.

Avatar
ownowl

Quand tu ouvres un fichier en mode texte sous Windows, toutes les "fausses"
fin de lignes 0x0D,0x0A sont remplacées par les vraies fin de lignes 'n'

str(all) ne fait rien car fichier.read() renvoye déjà un objet du type str.

Dans tous les cas, vérifie comment tu as ouvert ton fichier texte et passe
le en binaire si tu veux avoir un parfait controle sur le traitement des
retour à la ligne.



effectivement en l'ouvrant en mode binaire c'est nettement mieux

f = common.openFile( fichier , "rb")
sp = f.read().split("rn")
for s in sp :
...
merci à vous deux
Olivier

Avatar
Laurent Pointal
ownowl wrote:

bonjour à tous

débutant sous python, j'ai un petit problème pour lire un fichier text
qui comporte des retours chariots (n x0A) en dehors des fins de ligne

lorsque je lis le fichier squentiellement par readline(), les n sont
pris en compte et mes lignes ne sont pas complètes

Les "vrai" fin de lignes finissent par x0Dx0A, donc j'ai fait :
all = fichier.read()
sp = str(all).split("n")
for st in sp:
print st

ca split bien à n , mais ca split aussi ou il y en a pas besoin
j'ai essayé
- avec r : ca split rien, mais c'est peu etre la fonction str() qui
supprime le CR
- avec x0A : ca split rien, la c'est bizare, car à priori c'est parail
que n

donc la question est comment extraire les lignes d'un fichier texte,
uniquement en prenant en compte les caractères ascii x0Dx0A ?


Pour ne pas avoir à t'occuper de savoir si c'est CR ou CR+LF qui a été
utilisé comme fin de ligne dans un fichier texte (peut-être même LF seul
sur MacOS), ouvre ton fichier en mode lecture 'universelle'.

fichier = open ("toto.txt","rU")

après, tu n'es pas obligé de lire tout le fichier en mémoire, tu peux faire
des choses comme:

for ligne in fichier :
print ligne

Si tu veux vraiment tout récupérer dans une grosse liste:

all = fichier.readlines()

Enfin, pour avoir plus d'infos sur les méthodes des fichiers:

help(file)


A+

Laurent Pointal