J'ai une liste qui est lue à partir d'un fichier texte qui génère:
['/Users/myname/Documents/test1.txt', '/Users/myname/Documents/test2.txt', '/Users/myname/Documents/test3.txt']
Je veux supprimer le \ n de chaque élément, mais utiliser .split () ne fonctionne pas sur les listes uniquement des chaînes (ce qui est ennuyeux car il s'agit d'une liste de chaînes).
Comment supprimer le \ n de chaque élément pour obtenir le résultat suivant:
['/Users/myname/Documents/test1.txt\n', '/Users/myname/Documents/test2.txt\n', '/Users/myname/Documents/test3.txt\n']
7 Réponses :
old_list = [x.strip () for x in old_list]
old_list fait référence à la liste dont vous souhaitez supprimer \ n. p >
Ou si vous voulez quelque chose de plus lisible:
for x in range(len(old_list)):
old_list[x] = old_list[x].replace("\n", "")
Fait la même chose, sans compréhension de liste.
strip () supprime tous les espaces, y compris \n.
Mais si vous n'êtes pas d'accord avec l'idée de supprimer les espaces du début et de la fin, vous pouvez faire:
old_list = [x.replace ("\ n", "") for x in old_list]
ou
for x in range(len(old_list)):
old_list[x] = old_list[x].strip()
Ou simplement .strip () - le caractère de nouvelle ligne est un espace et strip sans arguments supprime uniquement les espaces. Et seulement depuis le début et la fin de la chaîne.
Quant à votre modification, non. 1. Ne nommez pas votre propre variable comme une variable intégrée. 2. Vous n'enregistrez pas le résultat du remplacement.
@ h4z3: Barcode> strip () est une bonne idée, seulement si OP est d'accord avec la suppression des espaces blancs (le cas échéant) aux extrémités.
Je ne comprends jamais pourquoi les gens disent que les compréhensions de listes sont moins lisibles. Ils ressemblent moins à du code «traditionnel» qu'à la boucle for mais, d'après mon expérience de la maintenance du code Python, cela les rend plus plutôt que moins lisibles.
C'est juste pour faciliter la vie des débutants. Un débutant peut mieux comprendre le code avec les boucles for traditionnelles. Je pense qu'ils sont au moins un peu plus lisibles que les listes de compréhension.
Utilisez :
[i.strip() for i in lines]
au cas où cela ne vous dérangerait pas de perdre les espaces et les tabulations au début et à la fin des lignes.
Essayez ce code:
lst = ['/Users/myname/Documents/test1.txt\n', '/Users/myname/Documents/test2.txt\n', '/Users/myname/Documents/test3.txt\n']
for n, element in enumerate(lst):
element = element.replace('\n', '')
lst[n] = element
print(lst)
Vous n'avez pas besoin de vérifier si '\ n' dans l'élément: .
C'est vrai, et j'ai également appris la fonction .strip () avec cet article. Merci d'avoir remarqué ça :)
faites une bande mais gardez à l'esprit que le résultat ne modifie pas la liste d'origine, vous devrez donc la réorganiser si nécessaire:
a = ['/Users/myname/Documents/test1.txt\n', '/Users/myname/Documents/test2.txt\n', '/Users/myname/Documents/test3.txt\n'] a = [path.strip() for path in a] print a
Vous pouvez lire le fichier entier et séparer les lignes en utilisant str.splitlines:
temp = file.read (). splitlines ()
si vous rencontrez toujours des problèmes, passez à cette question d'où j'ai obtenu la réponse
Comment lire un fichier sans nouvelle ligne? a répondu le 8 septembre 12 à 11:57 Bakuriu
Il existe de nombreuses façons d'obtenir votre résultat.
Méthode 1: en utilisant la méthode split ()
l = ['/Users/myname/Documents/test1.txt\n', '/Users/myname/Documents/test2.txt\n', '/Users/myname/Documents/test3.txt\n']
result = [i.replace('\n', '') for i in l]
print(result) # ['/Users/myname/Documents/test1.txt', '/Users/myname/Documents/test2.txt', '/Users/myname/Documents/test3.txt']
Méthode 2: utilisation de la méthode strip () qui supprime les espaces de début et de fin
l = ['/Users/myname/Documents/test1.txt\n', '/Users/myname/Documents/test2.txt\n', '/Users/myname/Documents/test3.txt\n'] result = [i.rstrip() for i in l] print(result) # ['/Users/myname/Documents/test1.txt', '/Users/myname/Documents/test2.txt', '/Users/myname/Documents/test3.txt']
Méthode 3: en utilisant la méthode rstrip () qui supprime les espaces de fin
l = ['/Users/myname/Documents/test1.txt\n', '/Users/myname/Documents/test2.txt\n', '/Users/myname/Documents/test3.txt\n'] result = [i.strip() for i in l] print(result) # ['/Users/myname/Documents/test1.txt', '/Users/myname/Documents/test2.txt', '/Users/myname/Documents/test3.txt']
Méthode 4: en utilisant la méthode replace
l = ['/Users/myname/Documents/test1.txt\n', '/Users/myname/Documents/test2.txt\n', '/Users/myname/Documents/test3.txt\n']
result = [i.split('\n')[0] for i in l]
print(result) # ['/Users/myname/Documents/test1.txt', '/Users/myname/Documents/test2.txt', '/Users/myname/Documents/test3.txt']
Voici une autre façon de le faire avec lambda:
cleannewline(yourlist)
Ensuite, vous pouvez simplement l'appeler comme:
cleannewline = lambda somelist : map(lambda element: element.strip(), somelist)
Itérez la liste, puis divisez les chaînes ...
@Ellis, pourquoi voulez-vous diviser les chaînes? Juste
strip ('\ n').@Austin Je viens d'utiliser le langage comme dans la question. Aussi, je n'ai pas encore bu mon café :-)