Подтвердить что ты не робот

Преобразование случая змеи в нижний корпус верблюда (lowerCamelCase)

Что было бы хорошим способом конвертировать из футляра змеи (my_string) в нижний регистр верблюда (myString) в Python 2.7?

Очевидное решение состоит в том, чтобы разделить по подчеркиванию, загладить каждое слово, кроме первого, и объединиться.

Тем не менее, мне любопытно относиться к другим, более идиоматическим решениям или к способу использования RegExp для достижения этого (с некоторым модификатором случая?)

4b9b3361

Ответ 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))