Bonjour,
C’est quoi le problème exactement ?
la cata: espaces non voulu ou pas et sinon à la prochaine session.
est fort peu compréhensible
Quant à
pourquoi il 'y des sauts de lignes(caractère'\n') qui deviennent des éléments de readlines()
c’est parce que readlines() est comme ça: ils ne deviennent pas, il y a des '\n' dans le texte ou il n’y en a pas, et s’il y a des ’\n’ dans le texte, readlines() montre le fichier tel qu’il a été précisément lu, y compris les ’\n’, il n’y a là rien que de très conforme à sa nature.
readlines() lit un fichier en entier, le split selon les caractères ’\n’ et met les lignes obtenues dans une liste, tout en gardant les caractères ’\n’ dans chaque ligne.
S’il y a des caractères ’\n’ dans le fichier lu, readlines() les conserve dans les chaînes qui représentent les lignes dans la liste qu’elle renvoie.
C’est ainsi et pas autrement.
writelines() fait le contraire de readlines() mais de façon similaire: en écrivant précisément ce qu’on lui passe, c’est à dire sans ajouter de ’\n’ s’il n’y en a pas dans les lignes à écrire.
Tel que tu l’utilises, writelines() ne se justifie pas dans ton exemple dans lequel tu fais écrire des chaînes et non pas des listes alors qu’on utilise writelines() pour écrire une liste.
Tu devrais donc écrire plutôt
1 2 3
| a.write(b)
a.write(' ')
a.write(str(c)) |
Comme tu ne veux apparemment pas introduire de ’\n’ entre les chaînes indiquées, tu devrais d’ailleurs écrire plus succintement
a.writelines([b, ,str(c)])
-----------------------------------------------------
Pour visualiser le contenu précis d’un fichier:
1 2 3 4
| f = open(’un_fichier.txt’,’rb’)
ch = f.read()
f.close()
print repr(ch) |
ou mieux:
1 2 3
| with open(’un_fichier.txt’,’rb’) as f:
ch = f.read()
print repr(ch) |
Le ’rb’ est important, c’est une ouverture en mode binaire, c’est le seul moyen de connaître très exactement tous les caractères présent dans le fichier.
Son utilisation permet d’être précis dans ce qu’on fait.
Elle conduit aussi à des découvertes:
- Sous Windows, l’OS écrit systématiquement des fins de lignes ’\r\n’ en mode ’w’ même quand on spécifie seulement des ’\n’ dans une chaîne à écrire en fichier.
Pour écrire exactement ce qu’on veut , il faut là aussi le faire en mode binaire ’wb’.
- Sous Python, lire en ’r’ un fichier contenant des ’\r\n’ ne montre pas les ’\r’ car Python, par défaut transforme systématiquement tous les ’\r\n’ en ’\n’ pour qu’il y ait homogénéité de traitement sur toutes les plateformes.
Pour lire ce qu’il y a exactement dans un fichier: mode ’rb’
Partager