120 votes

Python strip avec \n

C'est là mon problème.

J'essaie de lire un fichier texte et de convertir les lignes en flottants. Le fichier texte contient \n y \t mais je ne sais pas comment m'en débarrasser.

J'ai essayé d'utiliser line.strip() mais il ne l'a pas enlevé et j'ai obtenu une erreur lorsque j'ai voulu convertir les éléments en flottants. J'ai alors essayé line.strip("\n") mais cela n'a pas fonctionné non plus. Mon programme fonctionne bien lorsque j'enlève le \t y \n à partir du fichier texte, mais cela fait partie de la mission de faire en sorte qu'il fonctionne avec eux.

Je ne sais vraiment pas pourquoi cela ne fonctionne pas. Merci de votre aide.

213voto

austin1howard Points 1040

Vous devriez pouvoir utiliser line.strip('\n') y line.strip('\t') . Mais ceux-ci ne modifient pas le line ils renvoient simplement la chaîne avec la variable \n y \t dépouillé. Vous devrez donc faire quelque chose comme

line = line.strip('\n')
line = line.strip('\t')

Cela devrait permettre de supprimer le début et la fin. Si vous avez \n y \t au milieu de la chaîne, vous devez faire

line = line.replace('\n','')
line = line.replace('\t','')

pour remplacer le \n y \t avec le néant.

34voto

Dan Gerhardsson Points 1789

Les strip() supprime les espaces par défaut, il n'est donc pas nécessaire de l'appeler avec des paramètres tels que ' \t ou \n '. Cependant, les chaînes de caractères en Python sont immuables et ne peuvent pas être modifiées, c'est-à-dire que la fonction line.strip() ne modifiera pas le line objet. Le résultat est une nouvelle chaîne de caractères renvoyée par l'appel.

Comme nous l'avons déjà mentionné, il serait utile d'afficher un exemple de votre fichier d'entrée. S'il y a plus d'un nombre sur chaque ligne, strip() n'est pas la fonction à utiliser. Vous devez plutôt utiliser split() qui est également une méthode de chaîne.

Pour conclure, en supposant que chaque ligne contienne plusieurs nombres flottants séparés par des espaces blancs, et que vous souhaitiez construire une liste de tous les nombres, vous pouvez essayer ce qui suit :

floats = []
with open(filename) as f:
    for line in f:
        floats.extend([float(number) for number in line.split()])

8voto

Jobel Points 363

Vous pouvez utiliser :

mylist = []
# Assuming that you have loaded data into a lines variable. 
for line in lines:
    mylist.append(line.strip().split('\t')

pour obtenir une liste python contenant uniquement les valeurs des champs pour toutes les lignes de données.

6voto

sransara Points 1404

Pourquoi ne pas utiliser un python expressions rationnelles modèle ?

import re
f = open('test.txt', 'r')
strings = re.findall(r"\S+", f.read())

Et pour votre cas de line.strip() ne fonctionnera pas car Python ne supprime que les caractères de tête et de queue

En Docs Python - Renvoyer une copie de la chaîne avec suppression des caractères de tête et de fin . Si chars est omis ou None, les caractères d'espacement sont supprimés. S'il est donné et non None, chars doit être une chaîne ; les caractères de la chaîne seront supprimés aux deux extrémités de la chaîne sur laquelle cette méthode est appelée.

1voto

robert king Points 5369

La bibliothèque python csv est idéale pour cela.

http://docs.python.org/library/csv.html

CSV = comma seperated values, mais si vous définissez le délimiteur = \t alors cela fonctionne aussi pour les valeurs séparées par des tabulations.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X