刚学习Python的时候,你是否遇到过这样的练习?
- 打印英文字母表(26个连续字母)
- 打印所有数字(0-9)
- ...
比如前两个,当时只能老老实实的逐个手动输入“abcdefghijklmnopkrstuvwxyz”和“0123456789”给 print 函数,向下面这样:
print('abcdefghijklmnopkrstuvwxyz')
print('0123456789')
# abcdefghijklmnopkrstuvwxyz
# 0123456789
今天看书才发现一个更省事的方法,Python的 string 模块里面定义一些常用的常量,就包括字母表、数字等等,只需要调用相关的常量属性就可以实现,代码既简洁又高效。从此告别傻傻地手动输入。
本文,我将向大家介绍 string 模块的一些宝藏功能,让你写出更高效、更优雅的代码。
话不多说,开始上课!注意~~前方高能,美女助教引领大家快速进入状态,还在打瞌睡的请打起精神🤭🤭🤭
内置string模块
内置,意味着我们不需要单独安装它,只需要在脚本顶部导入它即可使用。该模块包括下面这些很有用的魔法属性:
1.string.ascii_lowercase
一次性输出所有26个小写字母,再也不用一个个手动输入啦!
import string
print(f'Alphabet by lowercase: {string.ascii_lowercase}')
# Alphabet by lowercase: abcdefghijklmnopqrstuvwxyz
2.string.ascii_uppercase
与 ascii_lowercase 相反,这个属性用于一次性输出所有大写字母:
print(f'Alphabet by uppercase: {string.ascii_uppercase}')
# Alphabet by uppercase: ABCDEFGHIJKLMNOPQRSTUVWXYZ
3.string.whitespace
这个属性可以一次性输出所有空格类型(白色空格、制表符、换行符等),注意,为了看到效果,请将结果转换为列表后输出,否则直接打印的话会是一片空白:
print(f'All whitespaces: {[string.whitespace]}')
# All whitespaces: [' \t\n\r\x0b\x0c']
4.string.punctuation
这个属性可用于一次性输出所有标点符号:
print(f'All punctuations: {string.punctuation}')
# All punctuations: !"#$%&'()*+,-./:;?@[\]^_`{|}~
5.string.digits
一次性打印出所有数字:
print(f'All numbers: {string.digits}')
# All numbers: 0123456789
6.string.ascii_letters
这个属性是 ascii_lowercase 和 ascii_uppercase 的组合,即一次性打印出所有大小写字母:
print(f'Alpabet letters: {string.ascii_letters}')
# Alpabet letters: abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
7.string.hexdigits
这个属性可以输出代表十六进制数字的所有字符:
print(f'Hex digits: {string.hexdigits}')
# Hex digits: 0123456789abcdefABCDEF
8.string.octdigits
这个属性则用于输出代表八进制的所有字符,与 string.digits 的输出结果相比,少了“89”:
print(f'Octal digits: {string.octdigits}')
# Octal digits: 01234567
这些预定义的字符串常量可以用于多种场景,例如数据验证、数据清洗、字符分类和更多。例如,使用 string.digits 可以快速检查或过滤出字符串中的数字,或者使用 string.punctuation 来移除文本中的所有标点符号。
string 模块本身主要提供的是这些预定义常量,而不提供特殊的方法或函数。但这些常量在结合正则表达式或其他字符串处理功能时,可以让你的代码更简洁和优雅,更加 Pythonic。
例如,如果需要检查一个字符串是否只包含字母和数字,可以结合使用 string.ascii_letters 和 string.digits 来创建一个检查用的集合:
import string
allowed_chars = set(string.ascii_letters + string.digits)
def is_alphanumeric(s):
return set(s).issubset(allowed_chars)
test_str = 'I love Python programming, 666!'
print(is_alphanumeric(test_str))
# False
进阶用法
在Python标准库的 string 模块中,我已经列出了主要的预定义字符串常量,这些常量基本涵盖了模块的核心功能。这些常量主要用于提供方便的字符集,帮助程序员在处理文本数据时避免手动键入这些常见的字符列表。
除了前面提到的常量,string 模块没有提供其他的内置方法或属性。它的设计主要是为了提供简便的、预定义的字符集,这些字符集经常在文本处理中使用。
进阶使用
虽然 string 模块本身功能相对简单,但可以与Python的其他文本处理功能如正则表达式 (re 模块)、文本转换和编码等结合使用来实现更复杂的功能。这里是一些实用的示例,展示如何利用 string 模块来处理更高级的文本问题:
- 生成随机字符串:使用string模块中的字符集合,结合random模块,可以轻松生成随机密码或标识符。
import string
import random
def get_random_string(length=10):
return ''.join(random.choice(string.ascii_letters + string.digits) for _ in range(length))
print(f'Random password: {get_random_string()}')
print(f'Random identifier: {get_random_string(length=12)}')
# Random password: wc7m5wD2KM
# Random identifier: SHrea9RchD4A
- 清洗字符串:移除字符串中的特定字符集,比如所有标点符号。
import string
def remove_punctuation(s):
return s.translate(str.maketrans('', '', string.punctuation))
test_str = 'My email is myname@example.com!'
print(f'Removed punctuation: {remove_punctuation(test_str)}')
# Removed punctuation: My email is mynameexamplecom
- 字符分类:可以使用string模块来快速分类字符串中的字符,如分离字母和数字。
import string
def classify_chars(s):
letters = [ch for ch in s if ch in string.ascii_letters]
digits = [ch for ch in s if ch in string.digits]
return letters, digits
结论
尽管 string 模块提供的内容相对简单,但这些工具非常适合与 Python 中的其他功能相结合,创建更复杂的文本处理解决方案。这种模块化的方法不仅保持代码的简洁性,也提高了开发效率。
好啦,今天分享就到此结束啦!赶紧去用起来吧!