在 Python 2.7 中从蛇形大小写 ( my_string
) 转换为小驼形大小写 (myString) 的好方法是什么?
显而易见的解决方案是用下划线分割,将除第一个单词之外的每个单词大写,然后重新连接在一起。
但是,我很好奇其他更惯用的解决方案或RegExp
用于实现此目的的方法(使用一些案例修饰符?)
在 Python 2.7 中从蛇形大小写 ( my_string
) 转换为小驼形大小写 (myString) 的好方法是什么?
显而易见的解决方案是用下划线分割,将除第一个单词之外的每个单词大写,然后重新连接在一起。
但是,我很好奇其他更惯用的解决方案或RegExp
用于实现此目的的方法(使用一些案例修饰符?)
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'
这是另一种方法,仅适用于 Python 3.5 及更高版本:
def camel(snake_str):
first, *others = snake_str.split('_')
return ''.join([first.lower(), *map(str.title, others)])
这有点晚了,但我几天前在 /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
强制单行:
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'
另一个班轮
def to_camel_case(snake_string):
return snake_string.title().replace("_", "")
''.join((wd.title() if i else wd) for (i,wd) in enumerate(string.split('_')))
def toCamel(snake)
return ''.join( word.capitalize()
for word in snake.split('_') )
允许下划线被前面的下划线转义(例如,“Escaped__snake”将变为“Escaped_Snake”,而“usual_snake”变为“UsualSnake”。包括空白的三元测试。
def toCamel(escaped_snake)
return ''.join( (word.capitalize(), '_')[word=='')
for word in escaped_snake.split('_') )
不要将第一段大写(即,'tHERE_is_a_snake' 变为 'thereIsASnake')
def toCamel(esCAPed_snake)
words = esCAPed_snake.split('_')
return words[0].lower() + ''.join( (word.capitalize(), '_')[word=='')
for word in words[1:] )
基于史蒂夫的回答,这个版本应该可以工作:
def to_camel_case(snake_case_string):
titleCaseVersion = snake_case_string.title().replace("_", "")
camelCaseVersion = titleCaseVersion[0].lower() + titleCaseVersion[1:]
return camelCaseVersion
这是使用正则表达式的解决方案:
import re
def snake_to_camel(text):
return re.sub('_([a-zA-Z0-9])', lambda m: m.group(1).upper(), text)
pydash
熟悉的可以使用lodash
。
pip install pydash
第一的。
import pydash # pip install pydash
assert pydash.snake_case("WriteLine") == "write_line"
assert pydash.snake_case("writeLine") == "write_line"
assert pydash.camel_case("write_line") == "writeLine"
assert pydash.upper_first(pydash.camel_case("write_line")) == "WriteLine"
https://github.com/dgilland/pydash
这太简单了?
snake_case 已经是小写了。my_string
因此,如果我们为字符串命名并删除下划线MyString
然后将第一个字符替换为我们完成M
的原始字符。m
scase = "my_string"
ccase = scase[0] + scase.title().replace('_', '')[1:]
输出:
myString
def to_camel_case(snake_str):
components = snake_str.split('_')
return reduce(lambda x, y: x + y.title(), components[1:], components[0])
因此,我需要将带有一堆蛇案例参数的整个文件转换为骆驼案例。Mathieu Rodic的解决方案效果最好。谢谢。
这是一个在文件上使用它的小脚本。
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))
不使用列表推导:
def snake_to_camel_case(text_snake):
return '{}{}'.format(
text_snake[:1].lower(),
text_snake.title().replace('_', '')[1:],
)