Quel serait un bon moyen de convertir cas de serpent (my_string
) en cas de chameau inférieur (myString) dans Python 2.7?
La solution évidente consiste à séparer par un trait de soulignement, à mettre en majuscule chaque mot sauf le premier et à le rejoindre.
Cependant, je suis curieux de connaître d’autres solutions plus idiomatiques ou un moyen d’utiliser RegExp
pour y parvenir (avec un modificateur de casse?)
def to_camel_case(snake_str):
components = snake_str.split('_')
# We capitalize the first letter of each component except the first one
# with the 'title' method and join them together.
return components[0] + ''.join(x.title() for x in components[1:])
Exemple:
In [11]: to_camel_case('snake_case')
Out[11]: 'snakeCase'
Voici encore une autre prise, qui ne fonctionne que dans Python 3.5:
def camel(snake_str):
first, *others = snake_str.split('_')
return ''.join([first.lower(), *map(str.title, others)])
One-liner obligatoire:
import string
def to_camel_case(s):
return s[0].lower() + string.capwords(s, sep='_').replace('_', '')[1:] if s else s
>>> snake_case = "this_is_a_snake_case_string"
>>> l = snake_case.split("_")
>>> print l[0] + "".join(map(str.capitalize, l[1:]))
'thisIsASnakeCaseString'
un autre one liner
def to_camel_case(snake_string):
return snake_string.title().replace("_", "")
S'appuyant sur la réponse de Steve, cette version devrait fonctionner:
def to_camel_case(snake_case_string):
titleCaseVersion = snake_case_string.title().replace("_", "")
camelCaseVersion = titleCaseVersion[0].lower() + titleCaseVersion[1:]
return camelCaseVersion
Voici une solution utilisant des expressions régulières:
import re
def snake_to_camel(text):
return re.sub('_([a-zA-Z0-9])', lambda m: m.group(1).upper(), text)
def to_camel_case(snake_str):
components = snake_str.split('_')
return reduce(lambda x, y: x + y.title(), components[1:], components[0])
Sans utiliser les compréhensions de liste:
def snake_to_camel_case(text_snake):
return '{}{}'.format(
text_snake[:1].lower(),
text_snake.title().replace('_', '')[1:],
)
Il existe également tocamelcase
pour convertir facilement un étui de serpent en étui de chameau.
$ pip install tocamelcase
et ensuite vous pouvez l'utiliser comme ceci:
import tocamelcase
print(tocamelcase.convert("non_camel_case"))
# -> non_camel_case → NonCamelCase
Il y a aussi decamelize
qui est l'inverse de ce module.
Un peu tard, mais j'ai trouvé ceci sur/r/python il y a quelques jours:
pip install pyhumps
et alors vous pouvez simplement faire:
import humps
humps.camelize('jack_in_the_box') # jackInTheBox
# or
humps.decamelize('rubyTuesdays') # Ruby_tuesdays
# or
humps.pascalize('red_robin') # RedRobin
J'ai donc eu besoin de convertir un fichier entier avec un tas de paramètres de cas de serpent en cas de chameau. La solution de Mathieu Rodic a fonctionné mieux. Merci.
Voici un petit script pour l'utiliser sur des fichiers.
import re
f = open("in.txt", "r")
words = f.read()
def to_camel_case3(s):
return re.sub(r'_([a-z])', lambda x: x.group(1).upper(), s)
f = open("out.txt", "w")
f.write(to_camel_case3(words))