stringtools provides string operations, such as analaysing, converting, generating, validating.
Project description
stringtools provides string operations, such as analaysing, converting, generating, validating.
Source Code: https://github.com/Vazno/stringtools
PyPI: https://pypi.org/project/stringtools/
stringtools has a lot of solutions specially built to be fast and stable ⚡.
The key features are:
- Easy to use: It has a very friendly and well-commented code.
- Open source: stringtools is completely free and open source
- Stability: Most of the code is covered with tests, so there is a less chance to catch a bug.
- Pure Python: This library will work on every python supporting system, also it doesn't need any external modules.
Installation:
pip install stringtools
User’s Guide:
There are 5 categories:
analaysers - Analyse string.
is_pangram | is_heterogram | is_anagram | is_palindrome |
is_tautogram | is_binary | count_chars | count_words |
classic_levenshtein | damerau_levenshtein | recursive_levenshtein | wf_levenshtein |
wfi_levenshtein |
converters - Convert one string value to other string value.
bricks | replaceall | numerate_text | remove_trailing_whitespaces |
remove_leading_whitespaces | text_to_binary | binary_to_text | str_to_bool |
general - General string operations.
Cases |
generators - Generate text inforamation.
Nick | Password | LoremIpsum |
validators - Validate ip, email addresses, e.t.c
validate_semver | validate_email | validate_ipv4 | validate_ipv6 |
validate_url |
Usage/Examples
analaysers:
from stringtools.analysers import *
is_pangram()
↑ Checks if inputed string is pangram (A pangram is a sentence using every letter of a given alphabet at least once.)
is_pangram('Watch "Jeopardy!", Alex Trebek\'s fun TV quiz game.')
# -> True
is_pangram('Hello beautiful world!')
# -> False
is_heterogram()
↑ Checks if inputed string is heterogram (A heterogram is a string in which no letter of the alphabet occurs more than once.)
is_heterogram("abcd")
# -> True
is_heterogram("abcdd")
# -> False
is_anagram()
↑ Checks if inputed string is an anagram (Anagram is a string that contain all letters from other string.)
is_anagram("Tom Marvolo Riddle", "I Am Lord Voldemort")
# -> True
is_anagram("God", "Good")
# -> False
is_palindrome()
↑ Checks if inputed string is a palindrome (A palindrome is a word, number, phrase, or other sequence of characters which reads the same backward as forward, such as madam or racecar.)
is_palindrome(["r","a","d","a","r"])
# -> True
is_palindrome(123)
# -> False
is_tautogram()
↑ Checks if inputed string is a tautogram (A tautogram is a text in which all words start with the same letter.)
is_tautogram("Crazy cat, cute, cuddly")
# -> True
is_tautogram("Crazy mouse, cute, cuddly")
# -> False
is_binary()
↑ Checks if given string or int is a binary number (A binary number is a number expressed in the base-2 numeral system or binary numeral system, a method of mathematical expression which uses only two symbols: 0 and 1)
is_binary(100101010101)
# -> True
is_binary("1010010101012")
# -> False
count_chars()
↑ Returns dictionary with every character counted.
count_chars("OOPp")
# -> {"O": 2, "P": 1, "p": 1}
count_chars("OOPp", lowercase=True)
# -> {"o": 2, "p": 2}
count_words()
↑ Returns an integer with every word counted.
count_words("Hello world!")
# -> 2
count_words("This is me")
# -> 3
Levenshtein.classic_levenshtein()
↑ Calculates the Levenshtein distance between two strings. This version is easier to read, but significantly slower than the version below (up to several orders of magnitude). Useful for learning, less so otherwise.
Levenshtein.classic_levenshtein('kitten', 'sitting')
# -> 3
Levenshtein.classic_levenshtein('kitten', 'kitten')
# -> 0
Levenshtein.classic_levenshtein('', '')
# -> 0
Levenshtein.damerau_levenshtein()
↑ Calculates the Damerau-Levenshtein distance between two strings. In addition to insertions, deletions and substitutions, Damerau-Levenshtein considers adjacent transpositions. This version is based on an iterative version of the Wagner-Fischer algorithm.
Levenshtein.damerau_levenshtein('kitten', 'sitting')
# -> 3
Levenshtein.damerau_levenshtein('kitten', 'kitten')
# -> 0
Levenshtein.damerau_levenshtein('', '')
# -> 0
Levenshtein.recursive_levenshtein()
↑ Calculates the Levenshtein distance between two strings.
Levenshtein.recursive_levenshtein('kitten', 'sitting')
# -> 3
Levenshtein.recursive_levenshtein('kitten', 'kitten')
# -> 0
Levenshtein.recursive_levenshtein('', '')
# -> 0
Levenshtein.wf_levenshtein()
↑ Calculates the Levenshtein distance between two strings. This version uses the Wagner-Fischer algorithm.
Levenshtein.wf_levenshtein('kitten', 'sitting')
# -> 3
Levenshtein.wf_levenshtein('kitten', 'kitten')
# -> 0
Levenshtein.wf_levenshtein('', '')
# -> 0
Levenshtein.wfi_levenshtein()
↑ Calculates the Levenshtein distance between two strings. This version uses an iterative version of the Wagner-Fischer algorithm.
Levenshtein.wfi_levenshtein('kitten', 'sitting')
# -> 3
Levenshtein.wfi_levenshtein('kitten', 'kitten')
# -> 0
Levenshtein.wfi_levenshtein('', '')
# -> 0
converters:
from stringtools.converters import *
bricks()
↑ Returns bricked version of a string.
bricks("Hello world!")
# -> "HeLlO WoRlD!
bricks("abcdef")
# -> "AbCdEf"
replaceall()
↑ Replaces text from given sentence and dictionary.
dictionary should be formatted like this:
{"old_string": "new_string"}
replaceall("12345", {"1": "One ", "2": "Two ", "3": "Three "})
# -> "One Two Three 45"
replaceall("Hello world!", {"Hello": "Sup", "world": "earth"})
# -> "Sup earth!"
numerate_text()
↑ Numerate each line of text.
numerate_text("Hello world\nHow are you doing?")
# -> "1 Hello World\\n2 How are you doing?"
numerate_text("First line.\nThe second line\nThe third line")
# -> "1 First line.\n2 The second line\n3 The third line"
remove_trailing_whitespaces()
↑ Remove all trailing whitespaces from sentence.
remove_trailing_whitespaces("text ")
# -> "text"
remove_trailing_whitespaces("Look at this. ")
# -> "Look at this."'''
remove_leading_whitespaces()
↑ Remove all leading whitespaces from sentence.
remove_leading_whitespaces(" text")
# -> "text"
remove_leading_whitespaces(" Look at this.")
# -> "Look at this."'''
text_to_binary()
↑ Convert string to a binary (A binary number is a number expressed in the base-2 numeral system or binary numeral system, a method of mathematical expression which uses only two symbols: 0 and 1)
text_to_binary("Hello")
# -> 0100100001100101011011000110110001101111
text_to_binary("A")
# -> 01000001
binary_to_text()
↑ Convert binary to text (A binary number is a number expressed in the base-2 numeral system or binary numeral system, a method of mathematical expression which uses only two symbols: 0 and 1)
binary_to_text("0100100001100101011011000110110001101111")
# -> "Hello"
binary_to_text("01000001")
# -> "A"'''
str_to_bool()
↑ Converts a string representation of truth to bool
False values are: "False", "f", "no", "n", "off", "0"
True values are: "True", "t", "yes", "y", "on", "1"
str_to_bool("True")
# -> True
str_to_bool("False")
# -> False
general:
from stringtools.general import *
Cases()
↑ Convert strings (and dictionary keys) between cases, and analyse.
Converting strings
Cases.camelize("jack_in_the_box")
# -> "jackInTheBox"
Cases.decamelize("rubyTuesdays")
# -> "ruby_tuesdays"
Cases.pascalize("red_robin")
# -> "RedRobin"
Cases.kebabize("white_castle")
# -> "white-castle"
Converting dictionary keys
array = [{"attrOne": "foo"}, {"attrOne": "bar"}]
Cases.decamelize(array)
# -> [{"attr_one": "foo"}, {"attr_one": "bar"}]
array = [{"attr_one": "foo"}, {"attr_one": "bar"}]
Cases.camelize(array)
# -> [{"attrOne": "foo"}, {"attrOne": "bar"}]
array = [{'attr_one': 'foo'}, {'attr_one': 'bar'}]
Cases.kebabize(array)
# -> [{'attr-one': 'foo'}, {'attr-one': 'bar'}]
array = [{"attr_one": "foo"}, {"attr_one": "bar"}]
Cases.pascalize(array)
# -> [{"AttrOne": "foo"}, {"AttrOne": "bar"}]
Checking character casing
Cases.is_camelcase("illWearYourGranddadsClothes")
# -> True
Cases.is_pascalcase("ILookIncredible")
# -> True
Cases.is_snakecase("im_in_this_big_coat")
# -> True
Cases.is_kebabcase('from-that-shop')
# -> True
Cases.is_camelcase("from_that_shop")
# -> False
Cases.is_snakecase("downTheRoad")
# -> False
Cases.is_kebabcase('from_that_shop')
# -> False
# what about abbrevations, acronyms, and initialisms? No problem!
Cases.decamelize("APIResponse")
# -> "api_response"
generators:
from stringtools.generators import *
Nick()
↑ Generate nicknames by inputed vowels, consonants, and other sounds.
n = Nick()
n.set_length(5)
for i in range(20):
print(n.generate())
# ->
# Irrol
# Uppuq
# Aguir
# Moury
# Uwrax
# Ezeoa
# Agaum
# Egeti
# Efuyu
# Iruek
# Qawze
# Oguei
# Hochu
# Maqod
# Suyff
# Idoor
# Keigh
# Uredi
# Eceuy
# Elere
Password()
↑ Generate very strong passwords.
You can choose these options for password:
- English (abcd...)
- Numerals (1234...)
- Special Symbols ('`<*...)
- Own symbols (Any)
- Exclude similar characters (1, l, L, 0, o, O, etc.)
p = Password()
p.set_length(8)
p.add_symbols()
p.add_digits()
p.add_add_ascii_letters()
p.generate()
# -> "C-3?r#$a"
p = Password()
p.set_length(16)
p.add_own("123")
# -> "3312311232131231"
print(Password.is_strong("123456789qwerty"))
# -> False
print(Password.is_strong("Aa0D#4v17@13.-0"))
# -> True
LoremIpsum()
↑ Generate Lorem Ipsum text. (Lorem ipsum is a placeholder text commonly used to demonstrate the visual form of a document or a typeface without relying on meaningful content.)
x = LoremIpsum()
x.set_length(5)
x.set_word_randrange((4, 10))
print(x.generate())
# -> "Lorem ipsum etnnimouft orknore zeoozeea."
print(x.generate())
# -> "Lorem ipsum eodyr gueipnaive pnaiz."
validators:
from stringtools.validators import *
Validator.validate_semver()
↑ Validate if version name follows semantic versioning. For more information go to: https://semver.org/
Validator.validate_semver("1.0.0")
# -> True
Validator.validate_semver("1.0.0.0")
# -> False
Validator.validate_email()
↑ Validate an email address.
Validator.validate_email("email@example.com")
# -> True
Validator.validate_email("email@example..com")
# -> False
Validator.validate_url()
↑ Validate url address.
Validator.validate_url("https://example.com/")
# -> True
Validator.validate_url("example.com")
# -> False
Validator.validate_ipv4()
↑ Validate an ipv4 address.
Validator.validate_ipv4("127.255.255.254")
# -> True
Validator.validate_ipv4("127.255.254")
# -> False
Validator.validate_ipv6()
↑ Validate an ipv6 address.
Validator.validate_ipv6("2345:0425:2CA1:0000:0000:0567:5673:23b5")
# -> True
Validator.validate_ipv6("0425:2CA1:0000:0000:0567:5673:23b5")
# -> False
Authors
- @Vazno
- @toastdriven - Levenshtein funcs
License 🔑
MIT - Copyright (c) 2022 Beksultan Artykbaev
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
stringtools-2.1.0.tar.gz
(20.9 kB
view hashes)
Built Distribution
Close
Hashes for stringtools-2.1.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5d7c0dd7c703fbf39452338ecae99479175195bf7d34ee67f3f10de45c2aa916 |
|
MD5 | 62d3a725d55db4b45c7755b2b6717038 |
|
BLAKE2b-256 | 1586f6b53135503856613b08d07f190175e7b04597209a30dadfd228da98883b |