Python编程技巧:那些年后悔没有早知道String模块的这些宝藏功能

13天前 16.2k 0

刚学习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 中的其他功能相结合,创建更复杂的文本处理解决方案。这种模块化的方法不仅保持代码的简洁性,也提高了开发效率。

好啦,今天分享就到此结束啦!赶紧去用起来吧!

相关文章

深度解析Java Thread Locals工作原理
一日一技:如何正确处理多行字符串的缩进问题
OpenTelemetry并非可观测性的“神奇按钮”
Python 对象的行为是怎么区分的?
面试官:你能实现一个 JavaScript 模板引擎吗?
记一次 .NET某工控WPF程序被人恶搞的卡死分析

发布评论