Se débarrasser de n Lors de l'utilisation.readlines() [en double]
cette question a déjà une réponse ici:
- lire un fichier sans newlines 8 réponses
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)
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()
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]
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()
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.
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
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.
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.
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.
with open('D:\file.txt', 'r') as f1:
lines = f1.readlines()
lines = [s[:-1] for s in lines]
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())
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.