A case conversion library for Python.
- Automatic case detection, no need to specify the input case
- Extremely fast, written in Rust ✨
- Support for Unicode characters
- Support for providing acronyms in title case
Supported cases
Function | Output |
---|---|
cases.to_camel(s) |
camelCase |
cases.to_pascal(s) |
PascalCase |
cases.to_snake(s) |
snake_case |
cases.to_screaming_snake(s) |
SCREAMING_SNAKE_CASE |
cases.to_kebab(s) |
kebab-case |
cases.to_screaming_kebab(s) |
SCREAMING-KEBAB-CASE |
cases.to_train(s) |
Train-Case |
cases.to_lower(s) |
lower case |
cases.to_title(s) |
Title Case |
cases.to_upper(s) |
UPPER CASE |
Install using
pip install pycases
Now convert a string using the relevant function.
import cases
cases.to_snake("XMLHttpRequest") # returns "xml_http_request"
Each of the provided functions using the same underlying implementation which does the following:
- Divide the input string into words
- Convert each word as required
- Join the words back together optionally with a separator
Word boundaries are defined as follows:
-
A set of consecutive Unicode non-letter and non-number characters.
For example: 'foo _bar' is two words (foo and bar)
-
A transition from a lowercase letter to an uppercase letter.
For example: fooBar is two words (foo and Bar)
-
A transition from multiple uppercase letters to a single uppercase letter followed by lowercase letters.
For example: FOOBar is two words (FOO and Bar)
Functions where the transform is "title" accept an optional acronyms
argument,
which is a mapping of lowercase words to their output. For example:
>>> cases.to_pascal("xml_http_request", acronyms={"xml": "XML"})
'XMLHttpRequest'
>>> cases.to_pascal("xml_http_request", acronyms={"xml": "XML", "http": "HTTP"})
'XMLHTTPRequest'
A simple benchmark against various other libraries is provided in ./benches. The following table shows the results when run on my Macbook M2 Max.
Library | Min (µs) | Max (µs) | Mean (µs) |
---|---|---|---|
cases | 26.666 | 176.834 | 30.909 |
pyheck | 51.000 | 131.416 | 53.565 |
pure python | 63.583 | 108.125 | 65.075 |
re | 81.916 | 171.000 | 87.856 |
stringcase | 99.250 | 222.292 | 102.197 |
pydantic.alias_generators | 182.000 | 304.458 | 189.063 |
inflection | 229.750 | 360.792 | 239.153 |
caseconversion | 1,430.042 | 1,838.375 | 1,559.019 |
This project is licensed under the terms of the MIT license. See LICENSE for more details.