web-dev-qa-db-fra.com

Fractionnement sur le dernier séparateur dans la chaîne Python?

Quel est l'idiome recommandé Python pour fractionner une chaîne lors de l'occurrence last du délimiteur de la chaîne? exemple:

# instead of regular split
>> s = "a,b,c,d"
>> s.split(",")
>> ['a', 'b', 'c', 'd']

# ..split only on last occurrence of ',' in string:
>>> s.mysplit(s, -1)
>>> ['a,b,c', 'd']

mysplit prend un deuxième argument qui correspond à l'occurrence du délimiteur à scinder. Comme dans l'indexation de liste normale, -1 signifie le dernier de la fin. Comment cela peut-il être fait?

156
user248237

Utilisez .rsplit() ou .rpartition() à la place:

s.rsplit(',', 1)
s.rpartition(',')

str.rsplit() vous permet de spécifier le nombre de fois à scinder, alors que str.rpartition() ne scinde qu'une seule fois mais retourne toujours un nombre fixe d'éléments (préfixe, délimiteur et suffixe) et est plus rapide pour le cas à fractionnement simple.

Démo:

>>> s = "a,b,c,d"
>>> s.rsplit(',', 1)
['a,b,c', 'd']
>>> s.rsplit(',', 2)
['a,b', 'c', 'd']
>>> s.rpartition(',')
('a,b,c', ',', 'd')

Les deux méthodes commencent à se séparer du côté droit de la chaîne; en donnant à str.rsplit() un maximum comme second argument, vous pouvez diviser uniquement les occurrences les plus à droite.

274
Martijn Pieters

Vous pouvez utiliser rsplit

string.rsplit('delimeter',1)[1]

Pour obtenir la chaîne de l'envers.

10
Vivek Ananthan

Je viens de faire ça pour le plaisir

    >>> s = 'a,b,c,d'
    >>> [item[::-1] for item in s[::-1].split(',', 1)][::-1]
    ['a,b,c', 'd']
4
ViKiG