web-dev-qa-db-fra.com

Suppression de\r\n d'une liste Python après une importation avec readlines

J'ai sauvegardé une liste de symboles dans un fichier texte comme suit:

MMM
ABT
ABBV
ANF
....

Ensuite, j'utilise readlines pour mettre les symboles dans une liste Python:

stocks = open(textfile).readlines()

Cependant, lorsque je regarde la liste, elle contient un délimiteur de fin de ligne Windows que je ne souhaite pas:

list: ['MMM\r\n', 'ABT\r\n', 'ABBV\r\n', 'ANF\r\n', 'ACE\r\n', 'ACN\r\n', 'ACT\r\n', 'ADBE\r\n', 'ADT\r\n', 'AMD\r\n', 'AES\r\n', .....

Quelqu'un peut-il suggérer le moyen le plus simple de supprimer ces caractères indésirables?

14
Justin

C'est comme ça que readlines fonctionne. Vous pouvez le post-traiter:

stocks = [x.rstrip() for x in stocks]

Mais je préfère ne pas utiliser readlines du tout si je ne veux pas de caractère EOL, mais plutôt:

stocks = open(textfile).read().splitlines()

Ou même mieux:

with open(textfile) as f:
    stocks = f.read().splitlines()

(Cela ne fera presque certainement pas de différence ici, mais utiliser des gestionnaires de contexte pour fermer explicitement les objets de fichier est une bonne habitude à prendre.)

23
roippi

readlines() ne devrait jamais être utilisé à moins que vous sachiez que le fichier est vraiment petit. Pour votre application, il est préférable d'utiliser rstrip()

with open(filename, 'r') as f:
    for l in f:
        l = l.rstrip()
        # other operations. 
10
ssm

Vous pouvez remplacer \r\n par la chaîne vide dans une commande replace.

stocks = [x.replace("\r\n","") for x in stocks]
7
TheSoundDefense

Vous pouvez le faire comme ceci:

stocks = open(textfile).read().splitlines()
0
martineau