web-dev-qa-db-fra.com

Comment supprimer\n d'un élément de la liste?

J'essaie de placer Python sur une ligne de lecture d'un fichier .txt et d'écrire les éléments de la première ligne dans une liste. Les éléments du fichier étaient séparés par des tabulations. J'ai donc utilisé split("\t") pour séparer les éléments. Parce que le fichier .txt contient beaucoup d'éléments, j'ai sauvegardé les données de chaque ligne dans une liste séparée.

Le problème que j'ai actuellement est qu'il montre chaque liste comme ceci:

['Name1', '7.3', '6.9', '6.6', '6.6', '6.1', '6.4', '7.3\n']

Comment puis-je supprimer \n du dernier élément de la liste et le rendre simplement '7.3'?

55
Mr Wotan

Si vous souhaitez supprimer \n du dernier élément uniquement, utilisez ceci:

t[-1] = t[-1].strip()

Si vous souhaitez supprimer \n de tous les éléments, utilisez ceci:

t = map(lambda s: s.strip(), t)

Vous pouvez également envisager de supprimer \n before en scindant la ligne:

line = line.strip()
# split line...
116
Bolo

On dirait que vous voulez quelque chose comme la fonction Perl chomp().

C'est trivial à faire en Python:

def chomp(s):
    return s[:-1] if s.endswith('\n') else s

... en supposant que vous utilisiez Python 2.6 ou une version ultérieure. Sinon, utilisez légèrement le Plus verbeux:

def chomp(s):
    if s.endwith('\n'):
        return s[:-1]
    else:
        return s

Si vous souhaitez supprimer toutes les nouvelles lignes à la fin d'une chaîne (dans les cas où il pourrait y avoir plusieurs nouvelles lignes de fin pour une raison quelconque):

def chomps(s):
    return s.rstrip('\n')

Évidemment, vous ne devriez jamais voir une telle chaîne renvoyée par les méthodes readline() et readlines() normales de l’objet de fichier Python.

J'ai vu des gens supprimer aveuglément les derniers caractères (en utilisant s[:-1] slicing) des résultats de file readline() et des fonctions similaires. C'est une mauvaise idée car cela peut entraîner une erreur sur la dernière ligne du fichier (dans le cas où un fichier se termine par autre chose qu'une nouvelle ligne).

Au début, vous pourriez vous laisser aller à un faux sentiment de sécurité lorsque vous effacez aveuglément les caractères finaux des lignes que vous avez lues. Si vous utilisez un éditeur de texte normal pour créer vos fichiers de suite de tests, une nouvelle ligne sera ajoutée silencieusement à la fin de la dernière ligne par la plupart d'entre eux. Pour créer un fichier de test valide, utilisez le code suivant:

f = open('sometest.txt', 'w')
f.write('some text')
f.close()

... et si vous rouvrez ce fichier et utilisez les méthodes de fichier readline() ou readlines(), vous constaterez que le texte est lu sans le retour à la ligne final.

Cette incapacité à prendre en compte les fichiers texte se terminant par des caractères autres que des caractères de nouvelle ligne a affecté de nombreux utilitaires et langages de script UNIX pendant de nombreuses années. C'est un bogue de base de coin stupide qui s'introduit dans le code juste assez souvent pour être un nuisible mais pas assez souvent pour que les gens puissent en tirer des leçons. Nous pourrions argumenter que les fichiers "texte" sans la nouvelle ligne ultime sont "corrompus" ou non standard; et cela peut être valable pour certaines spécifications de programmation.

Cependant, il est trop facile d'ignorer les cas critiques dans notre code et de laisser cette ignorance piquer les gens qui dépendent de votre code plus tard. Comme mon épouse le dit: quand il s’agit de programmer, pratiquez l’hex sans danger!

10
Jim Dennis

Utilisation de la compréhension de liste:

myList = ['Name1', '7.3', '6.9', '6.6', '6.6', '6.1', '6.4', '7.3\n']

[(el.strip()) for el in myList]
5
rogeriopvl

de ce link :

vous pouvez utiliser la méthode rstrip (). Exemple

mystring = "hello\n"    
print(mystring.rstrip('\n'))
3
itagomo

Cela fonctionnera aussi,

f=open('in.txt','r')

    for line in f:
            parline = line[:-1].split(',')
2
drunkbn

Comme méthode alternative, si vous savez qu'il n'y a pas d'espaces dans vos données, ce qui semble être le cas, vous pouvez utiliser split () (sans argument). Cela divise l'espace et utilise un algorithme plus efficace que l'autre version de split. Il supprime également les espaces des deux côtés.

line = line.split()

Et c'est tout.

2
JoshD

Vous pourriez faire -

DELIMITER = '\t'
lines = list()
for line in open('file.txt'):
    lines.append(line.strip().split(DELIMITER))

La lines a tout le contenu de votre fichier. 

On pourrait aussi utiliser des listes de compréhension pour rendre cela plus compact.

lines = [ line.strip().split(DELIMITER) for line in open('file.txt')]
2

str.strip () supprime les caractères d'espacement. vous pouvez également passer des caractères personnalisés comme argument à dépouiller La fonction strip supprime les caractères blancs/personnalisés aux deux extrémités de la chaîne. lstrip () et rstrip () sont des fonctions de bandes gauche et droite resp.

Par exemple:

test_str = "Vishaka\n" 
test_str = test_str.strip()

test_str est maintenant Vishaka

2
gopalkoduri

Vous accédez au dernier élément de l'ensemble, puis enregistrez la valeur dans une variable.

Donc vous avez:

fileName = '7.3\n'

alors juste faire:

fileName.strip()

qui vous laissera avec 7.3. Stockez ensuite cette valeur dans le dernier élément de l'ensemble. 

Vous pouvez utiliser lstrip() ou rstrip() pour supprimer uniquement le côté gauche ou droit.

1
Pavan
new_list = ['Name1', '7.3', '6.9', '6.6', '6.6', '6.1', '6.4', '7.3\n']
for i in range(len(new_list)):
    new_list[i]=new_list[i].replace('\n','')
print(new_list)

La sortie sera comme ça

['Name1', '7.3', '6.9', '6.6', '6.6', '6.1', '6.4', '7.3']
0
Tanmoy Datta

Pour gérer de nombreux délimiteurs de nouvelle ligne, y compris des combinaisons de caractères telles que \r\n, utilisez splitlines . Combinez join et splitlines pour supprimer/remplacer toutes les nouvelles lignes d'une chaîne s:

''.join(s.splitlines())

Pour supprimer exactement un fin nouvelle ligne, transmettez True comme argument keepends pour conserver les délimiteurs, en supprimant uniquement les délimiteurs de la dernière ligne: 

def chomp(s):
    if len(s):
        lines = s.splitlines(True)
        last = lines.pop()
        return ''.join(lines + last.splitlines())
    else:
        return ''
0
user3780389

Cela fonctionne pour supprimer le \n (nouvelle ligne) d'un élément dans une listeIt prend juste le premier élément de la chaîne

def remove_end(s):
    templist=[]
    for i in s:
        templist.append(i)
    return(templist[0])
0
sryzr

J'ai eu ce problème et résolu en utilisant la fonction chomp décrite ci-dessus:

def chomp(s):
    return s[:-1] if s.endswith('\n') else s

def trim_newlines(slist):
    for i in range(len(slist)):
        slist[i] = chomp(slist[i])
    return slist
.....
names = theFile.readlines()
names = trim_newlines(names)
....
0
catchpolej

Puisque la question du PO concerne la suppression du caractère de nouvelle ligne du dernier élément, je le réinitialiserais avec the_list[-1].rstrip():

>>> the_list = ['Name1', '7.3', '6.9', '6.6', '6.6', '6.1', '6.4', '7.3\n']
>>> the_list[-1] = ls[-1].rstrip()
>>> the_list
['Name1', '7.3', '6.9', '6.6', '6.6', '6.1', '6.4', '7.3']

C'est O (1).

0
Srisaila