kzen.dev
  • Questions
  • Tags
  • Utilisateurs
Notifications
Récompenses
Inscription
Une fois inscrit, vous serez informé des réponses et des commentaires à vos questions.
Connectez-vous
Si vous avez déjà un compte, connectez-vous pour vérifier les nouvelles notifications.
Il y aura des récompenses pour les questions, réponses et commentaires ajoutés.
Détails
Source
Editer
 Yotam
Yotam
Question

lecture d'un fichier sans nouvelles lignes en Python

En Python, appeler

temp = open(filename,'r').readlines()

donne une liste dans laquelle chaque élément est une ligne du fichier. C'est un peu stupide mais quand même : readlines() écrit aussi un caractère de nouvelle ligne à chaque élément, ce que je ne souhaite pas voir se produire.

Comment puis-je l'éviter ?

316 2012-09-08T11:55:15+00:00 3
 ivanleoncz
ivanleoncz
Question modifiée 26 juillet 2019 в 10:34
Programmation
python
line-breaks
readlines
Cette question a 1 réponse en anglais, pour les lire connectez-vous à votre compte.
Solution / Réponse
 Bakuriu
Bakuriu
8 septembre 2012 в 11:57
2012-09-08T11:57:07+00:00
Détails
Source
Editer
#17157183

Vous pouvez lire le fichier entier et séparer les lignes en utilisant str.splitlines :

temp = file.read().splitlines()

Ou vous pouvez enlever la nouvelle ligne à la main :

temp = [line[:-1] for line in file]

Note: cette dernière solution ne fonctionne que si le fichier se termine par une nouvelle ligne, sinon la dernière ligne perdra un caractère.

Cette hypothèse est vraie dans la plupart des cas (en particulier pour les fichiers créés par des éditeurs de texte, qui souvent ajoutent de toute façon une nouvelle ligne à la fin).

Si vous voulez éviter cela, vous pouvez ajouter une nouvelle ligne à la fin du fichier :

with open(the_file, 'r+') as f:
    f.seek(-1, 2)  # go at the end of the file
    if f.read(1) != '\n':
        # add missing newline if not already present
        f.write('\n')
        f.flush()
        f.seek(0)
    lines = [line[:-1] for line in f]

Ou une alternative plus simple est de strip la nouvelle ligne à la place :

[line.rstrip('\n') for line in file]

Ou même, bien qu'assez illisible :

[line[:-(line[-1] == '\n') or len(line)+1] for line in file]

Ce qui exploite le fait que la valeur de retour de ou n'est pas un booléen, mais l'objet qui a été évalué vrai ou faux.


La méthode readlines est en fait équivalente à :

def readlines(self):
    lines = []
    for line in iter(self.readline, ''):
        lines.append(line)
    return lines

# or equivalently

def readlines(self):
    lines = []
    while True:
        line = self.readline()
        if not line:
            break
        lines.append(line)
    return lines

Puisque readline() conserve la nouvelle ligne, readlines() la conserve également.

*Remarque : par symétrie avec readlines(), la méthode writelines() n'ajoute pas* de nouvelles lignes de fin, donc f2.writelines(f.readlines()) produit une copie exacte de f dans f2.

 sds
sds
Réponse modifiée 23 janvier 2017 в 7:16
471
0
 vivek
vivek
8 septembre 2012 в 11:57
2012-09-08T11:57:56+00:00
Détails
Source
Editer
#17157184
temp = open(filename,'r').read().split('\n')
30
0
 user4730171
user4730171
30 mars 2015 в 2:31
2015-03-30T14:31:43+00:00
Détails
Source
Editer
#17157185
def getText():
    file=open("ex1.txt","r");

    names=file.read().split("\n");
    for x,word in enumerate(names):
        if(len(word)>=20):
            return 0;
            print "length of ",word,"is over 20"
            break;
        if(x==20):
            return 0;
            break;
    else:
        return names;

def show(names):
    for word in names:
        len_set=len(set(word))
        print word," ",len_set

for i in range(1):

    names=getText();
    if(names!=0):
        show(names);
    else:
        break;
 Pang
Pang
Réponse modifiée 1er avril 2015 в 1:07
-6
0
Communautés apparentées 2
Python en français
Python en français
1 431 utilisateurs
Ouvrir telegram
Python 🇨🇵
Python 🇨🇵
117 utilisateurs
Un groupe de Python en français. @Linux_Fr
Ouvrir telegram
Ajouter une question
Catégories
Toutes
Technologie
Culture / Loisirs
Vie / Arts
Science
Professionnel
Entreprises
Utilisateurs
Tous
Nouveau
Populaire
1
Ilya Smirnov
Enregistré il y a 5 jours
2
Денис Васьков
Enregistré il y a 1 semaine
3
Dima Patrushev
Enregistré il y a 1 semaine
4
sirojidddin otaboyev
Enregistré il y a 2 semaines
5
Елена Гайдамамакинат
Enregistré il y a 2 semaines
DE
EL
ES
FR
ID
IT
JA
KO
LT
NL
PT
RO
RU
SL
TR
ZH
© kzen.dev 2023
Source
stackoverflow.com
sous licence cc by-sa 3.0 avec l'attribution