C'est mon problème.
J'essaie de lire un fichier texte, puis de convertir les lignes en floats. Le fichier texte contient \n
et \t
, mais je ne sais pas comment m'en débarrasser.
J'ai essayé d'utiliser line.strip()
mais cela ne l'a pas enlevé et j'ai eu une erreur lorsque je voulais convertir le contenu en float. J'ai ensuite essayé line.strip("\n")
mais cela n'a pas fonctionné non plus. Mon programme fonctionne bien lorsque je retire les \t
et \n
du fichier texte, mais cela fait partie de la tâche de le faire fonctionner avec eux.
Je ne sais vraiment pas pourquoi cela ne fonctionne pas. Merci pour toute aide.
Vous devriez pouvoir utiliser line.strip('\n')
et line.strip('\t')
. Mais ceux-ci ne modifient pas la variable line
... ils renvoient simplement la chaîne avec les champs \n
et \t
stripped Donc, vous devrez faire quelque chose comme
line = line.strip('\n')
line = line.strip('\t')
Cela devrait fonctionner pour supprimer du début et de la fin. Si vous avez \n
et \t
au milieu de la chaîne, vous devez faire
line = line.replace('\n','')
line = line.replace('\t','')
pour remplacer le \n
et le \t
par rien.
La méthode strip()
supprime les espaces blancs 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 en Python sont immuables et ne peuvent pas être modifiées, c’est-à-dire que l’appel line.strip()
ne changera pas l’objet line
. Le résultat est une nouvelle chaîne qui est renvoyée par l'appel.
Comme déjà mentionné, il serait utile que vous publiiez un exemple à partir de votre fichier d’entrée. S'il y a plus d'un numéro sur chaque ligne, strip()
n'est pas la fonction à utiliser. Au lieu de cela, vous devriez utiliser split()
, qui est également une méthode de chaîne.
Pour conclure, en supposant que chaque ligne contient plusieurs flottants séparés par des espaces et que vous souhaitiez créer une liste de tous les nombres, vous pouvez essayer les solutions suivantes:
floats = []
with open(filename) as f:
for line in f:
floats.extend([float(number) for number in line.split()])
Pourquoi ne pas utiliser un motif python regex ?
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 supprime uniquement les caractères de début et de fin
From Python Docs - Renvoie une copie de la chaîne avec caractères de fin et de fin supprimés. Si chars est omis ou None, les caractères d'espacement sont supprimés. Si donné et non None, les caractères doivent ê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.
Si vous essayez de convertir des lignes de flottants séparées par des caractères de tabulation, alors float(line)
tentera de convertir la ligne entière en un seul flottant, ce qui échouera s'il y en a plus d'un. Utiliser strip
pour se débarrasser des espaces de début et de fin ne va pas résoudre ce problème fondamental.
Peut-être avez-vous besoin de split
chaque ligne en morceaux et de faire quelque chose avec chaque morceau?
la bibliothèque csv de pythons est bonne pour cela.
http://docs.python.org/library/csv.html
CSV = valeurs séparées par des virgules, mais si vous définissez le délimiteur =\t, cela fonctionne également pour les valeurs séparées par des tabulations.
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 avec uniquement les valeurs de champ pour toutes les lignes de données.
Souvent, en fonction de la façon dont vous lisez les lignes, afin de vous débarrasser de\n dans myline, Vous pouvez utiliser myline [: - 1] Puisque\n est le dernier caractère de myline.
Pour le '\ t', vous pouvez utiliser replace () ou strip ()