Se débarrasser de n Lors de l'utilisation.readlines() [en double]

cette question a déjà une réponse ici:

j'ai un .fichier txt avec des valeurs.

les valeurs sont listées comme suit:

Value1
Value2
Value3
Value4

Mon objectif est de mettre les valeurs dans un liste. Quand je le fais, la liste ressemble à ceci:

['Value1n', 'Value2n', ...]

Le n n'est pas nécessaire.

Voici mon code:

t = open('filename.txt', 'r+w')
contents = t.readline()

alist = []

for i in contents:
    alist.append(i)
166
demandé sur martineau 2013-03-06 00:22:19

11 réponses

cela devrait faire ce que vous voulez (contenu du fichier dans une liste, par ligne, sans \n)

with open(filename) as f:
    mylist = f.read().splitlines() 
217
répondu user3131651 2015-07-11 23:49:32

je ferais ceci:

alist = [line.rstrip() for line in open('filename.txt')]

ou:

with open('filename.txt') as f:
    alist = [line.rstrip() for line in f]
91
répondu hughdbrown 2013-03-05 20:44:30

vous pouvez utiliser .rstrip('\n') à seulement retirez les lignes de la fin de la chaîne:

for i in contents:
    alist.append(i.rstrip('\n'))

cela laisse tous les autres espaces intacts. Si vous ne vous souciez pas de l'espace blanc au début et à la fin de vos lignes, alors le grand marteau lourd est appelé .strip() .

cependant, puisque vous lisez à partir d'un fichier et tirez tout dans la mémoire de toute façon , mieux vaut utiliser la str.splitlines() méthode ; cela divise une chaîne sur les séparateurs de ligne et renvoie une liste de lignes sans ces séparateurs; utilisez ceci sur le file.read() résultat et n'utilisez pas file.readlines() du tout:

alist = t.read().splitlines()
60
répondu Martijn Pieters 2016-09-28 10:50:57

pour chaque chaîne dans votre liste, utilisez .strip() qui supprime les espaces du début ou de la fin de la chaîne:

for i in contents:
    alist.append(i.strip())

mais selon votre cas d'utilisation, vous pourriez être mieux en utilisant quelque chose comme numpy.loadtxt ou même numpy.genfromtxt si vous avez besoin d'un tableau agréable des données que vous lisez à partir du fichier.

10
répondu askewchan 2013-03-05 20:23:39
from string import rstrip

with open('bvc.txt') as f:
    alist = map(rstrip, f)

Nota Bene: rstrip() supprime les espaces blancs, c'est-à-dire : \f , \n , \r , \t , \v , \x et blanc ,

but I suppose you're only interested to keep the significant characters in the lines. Then, mere map(strip, f) conviendra mieux, en enlevant les espaces de titre aussi.


si vous voulez vraiment éliminer seulement les symboles NL \n et RF \r , faites:

with open('bvc.txt') as f:
    alist = f.read().splitlines()

splitlines () sans argument passé ne conserve pas les symboles NL et RF (Windows enregistre les fichiers avec NLRF à la fin des lignes, au moins sur ma machine) mais conserve les autres espaces, notamment les blancs et les onglets.

.

with open('bvc.txt') as f:
    alist = f.read().splitlines(True)

a le même effet que

with open('bvc.txt') as f:
    alist = f.readlines()

c'est-à-dire les NL et RF sont conservés

9
répondu eyquem 2013-03-05 22:53:45

après avoir ouvert le fichier, list comprehension peut le faire en une ligne:

fh=open('filename')
newlist = [line.rstrip() for line in fh.readlines()]
fh.close()

n'oubliez pas de fermer votre dossier après.

5
répondu Lisle 2017-01-18 17:16:50

j'ai eu le même problème et j'ai trouvé la solution suivante pour être très efficace. J'espère que cela vous aidera, vous ou tous ceux qui veulent faire la même chose.

tout d'abord, je commencerais par une déclaration "avec" car elle assure la bonne ouverture/fermeture du fichier.

il devrait ressembler à quelque chose comme ceci:

with open("filename.txt", "r+") as f:
    contents = [x.strip() for x in f.readlines()]

si vous voulez convertir ces chaînes (chaque élément dans la liste des contenus est une chaîne) en entier ou float, vous pouvez faire ce qui suit:

contents = [float(contents[i]) for i in range(len(contents))]

utilisez int au lieu de float si vous voulez convertir en entier.

C'est ma première réponse, DONC désolé si c'est pas dans la mise en forme appropriée.

3
répondu geo1230 2016-09-27 19:46:19

j'ai récemment utilisé ce pour lire toutes les lignes d'un fichier:

alist = open('maze.txt').read().split()

ou vous pouvez l'utiliser pour qui peu plus de sécurité:

with f as open('maze.txt'):
    alist = f.read().split()

il ne fonctionne pas avec les espaces entre les textes dans une seule ligne, mais il semble que votre fichier d'exemple pourrait ne pas avoir les espaces séparant les valeurs. C'est une solution simple et elle retourne une liste précise de valeurs, et n'ajoute pas de chaîne vide: '' pour chaque vide ligne, comme un saut de ligne à la fin du fichier.

1
répondu micsthepick 2015-08-25 20:49:26
with open('D:\file.txt', 'r') as f1:
    lines = f1.readlines()
lines = [s[:-1] for s in lines]
0
répondu jperezmartin 2016-04-28 15:20:58

j'ai utilisé la fonction de bande pour se débarrasser du caractère de newline pendant que les lignes divisées lançaient des erreurs de mémoire sur le fichier de 4 Go.

Code Échantillon:

with open('C:\aapl.csv','r') as apple:
    for apps in apple.readlines():
        print(apps.strip())
0
répondu Yogamurthy 2017-07-06 15:26:43

la façon la plus facile de faire ceci est d'écrire file.readline()[0:-1] Ceci Lira tout sauf le dernier caractère, qui est la nouvelle ligne.

-1
répondu anon 2016-06-16 18:21:49