Преобразование случая змеи в нижний корпус верблюда (lowerCamelCase)
Что было бы хорошим способом конвертировать из футляра змеи (my_string
) в нижний регистр верблюда (myString) в Python 2.7?
Очевидное решение состоит в том, чтобы разделить по подчеркиванию, загладить каждое слово, кроме первого, и объединиться.
Тем не менее, мне любопытно относиться к другим, более идиоматическим решениям или к способу использования RegExp
для достижения этого (с некоторым модификатором случая?)
Ответы
Ответ 1
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:])
Пример:
In [11]: to_camel_case('snake_case')
Out[11]: 'snakeCase'
Ответ 2
Вот еще один дубль, который работает только в Python 3.5 и выше:
def camel(snake_str):
first, *others = snake_str.split('_')
return ''.join([first.lower(), *map(str.title, others)])
Ответ 3
Обязательный однострочный:
import string
def to_camel_case(s):
return s[0].lower() + string.capwords(s, sep='_').replace('_', '')[1:] if s else s
Ответ 4
>>> snake_case = "this_is_a_snake_case_string"
>>> l = snake_case.split("_")
>>> print l[0] + "".join(map(str.capitalize, l[1:]))
'thisIsASnakeCaseString'
Ответ 5
еще один лайнер
def to_camel_case(snake_string):
return snake_string.title().replace("_", "")
Ответ 6
На основе ответа Стива эта версия должна работать:
def to_camel_case(snake_case_string):
titleCaseVersion = snake_case_string.title().replace("_", "")
camelCaseVersion = titleCaseVersion[0].lower() + titleCaseVersion[1:]
return camelCaseVersion
Ответ 7
Вот решение, использующее регулярные выражения:
import re
def snake_to_camel(text):
return re.sub('_([a-zA-Z0-9])', lambda m: m.group(1).upper(), text)
Ответ 8
Немного поздно, но я нашел это на /r/python пару дней назад:
pip install pyhumps
и тогда вы можете просто сделать:
import humps
humps.camelize('jack_in_the_box') # jackInTheBox
# or
humps.decamelize('rubyTuesdays') # ruby_tuesdays
# or
humps.pascalize('red_robin') # RedRobin
Ответ 9
def to_camel_case(snake_str):
components = snake_str.split('_')
return reduce(lambda x, y: x + y.title(), components[1:], components[0])
Ответ 10
Без использования списочных представлений:
def snake_to_camel_case(text_snake):
return '{}{}'.format(
text_snake[:1].lower(),
text_snake.title().replace('_', '')[1:],
)
Ответ 11
Существует также tocamelcase
, с помощью которого можно легко переходить со случая змеи в чехол верблюда.
Установить
$ pip install tocamelcase
и тогда вы можете использовать его так:
import tocamelcase
print(tocamelcase.convert("non_camel_case"))
# -> non_camel_case → NonCamelCase
Существует также decamelize
, обратная этому модулю.
Ответ 12
Поэтому мне нужно было конвертировать целый файл с кучей параметров случая змеи в случай верблюда. Решение от Матье Родича работало лучше всего. Благодаря.
Вот небольшой скрипт для его использования в файлах.
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))