什么是将蛇形命名法(my_string)转换为小驼峰命名法(myString)的好方法?在Python 2.7中,有什么明显的解决方案可以通过下划线分割字符串,将每个单词的首字母大写,并重新拼接在一起。
然而,我对其他更惯用的解决方案或者使用正则表达式(RegExp)来实现这个目标(带有一些大小写修改器)很感兴趣。
然而,我对其他更惯用的解决方案或者使用正则表达式(RegExp)来实现这个目标(带有一些大小写修改器)很感兴趣。
def to_camel_case(snake_str):
return "".join(x.capitalize() for x in snake_str.lower().split("_"))
def to_lower_camel_case(snake_str):
# We capitalize the first letter of each component except the first one
# with the 'capitalize' method and join them together.
camel_string = to_camel_case(snake_str)
return snake_str[0].lower() + camel_string[1:]
例子:
In [11]: to_lower_camel_case('snake_case')
Out[11]: 'snakeCase'
In [12]: to_lower_camel_case('SNAKE_Case')
Out[12]: 'snakeCase'
In [13]: to_lower_camel_case('SNAKE_CASE')
Out[13]: 'snakeCase'
to_camel_case
并不负责确保输入是一个字符串,它的责任是由调用代码来承担。传递一个非字符串将引发异常,这是好事情。这就是异常的作用。 - kylebebak_bar
变成 bar
而不是 Bar
,则需要进行微小的调整:components = snake_str.lstrip('_').split('_')
- bigh_29str.capitalize()
比调用 str.title()
更加准确,因为 title()
暗示了给定字符串中有多个单词,但是在任何组成部分中都不应该有空格。 - sandor以下是另一种方法,仅适用于Python 3.5及更高版本:
def camel(snake_str):
first, *others = snake_str.split('_')
return ''.join([first.lower(), *map(str.title, others)])
join(...)
比join([...])
更好,因为它可以在不创建列表的情况下工作)。 - Vedran Šegojoin
方法的不是一个推导式而是一个常规列表。如果您想避免创建内存中的列表,可以使用itertools.chain
,但是如果在将蛇形命名法转换为驼峰命名法时您担心内存占用问题,那么您有更大的问题要处理。;-) - Berislav Lopac虽然有点晚了,但我几天前在/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
另一条简短的内容
def to_camel_case(snake_string):
return snake_string.title().replace("_", "")
必要的一行简介:
import string
def to_camel_case(s):
return s[0].lower() + string.capwords(s, sep='_').replace('_', '')[1:] if s else s
return re.sub(r'_([a-z])', lambda x: x.group(1).upper(), name)
。 - Mathieu Rodic>>> snake_case = "this_is_a_snake_case_string"
>>> l = snake_case.split("_")
>>> print l[0] + "".join(map(str.capitalize, l[1:]))
'thisIsASnakeCaseString'
''.join((wd.title() if i else wd) for (i,wd) in enumerate(string.split('_')))
def to_camel_case(snake_case_string):
titleCaseVersion = snake_case_string.title().replace("_", "")
camelCaseVersion = titleCaseVersion[0].lower() + titleCaseVersion[1:]
return camelCaseVersion
这个太简单了吗?
snake_case 已经是小写的了。 my_string
所以如果我们将字符串标题化并去掉下划线 MyString
然后用原始的 m
替换第一个字符 M
,我们就完成了。
scase = "my_string"
ccase = scase[0] + scase.title().replace('_', '')[1:]
myString
我个人使用这个解决方案,因为它是一个推进的转换:
from functools import reduce
def camelize(snake_string: str) -> str:
return reduce(lambda x, y: x + y.capitalize(), snake_string.split('_'))