1
votes

comment supprimer "\ n" d'une liste de chaînes

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']


3 commentaires

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é :-)


7 Réponses :


2
votes

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()


5 commentaires

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.



0
votes

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.


0 commentaires

0
votes

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)


2 commentaires

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 :)



0
votes

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


0 commentaires

0
votes

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


0 commentaires

0
votes

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']


0 commentaires

0
votes

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)


0 commentaires