Python中的文本处理(三)2种更加pythonic的字符串处理方式

本文介绍了Python3.6引入的f-string格式化字符串的简洁用法,支持表达式计算、方法调用及对齐填充,并对比了其与str.format的差异。此外,还讲解了parse库,这是一个用于数据抽取的第三方库,提供类似f-string的反向操作,提升代码可读性,避免复杂的正则表达式。示例展示了parse的parse、search、findall和compile方法的使用。
摘要由CSDN通过智能技术生成

字符串处理是编程中常用到的操作,本系列总结的目标是通过系统的介绍不同的方法来完成不同复杂度的字符串处理操作。旨在方便大家遇到不同的需求时,可以快速找到合适的处理方式,从而使代码开发快速,简洁,稳定的目的。

Python中的文本处理(一)str 模块完全解析

Python中的文本处理(二)re 模块的常用方法

本文为系列第三篇,更pythonic的方式进行字符串处理. 中点介绍一下Python3.6 新引入的字符串格式化方法f-string

 1.f-string

一个更加优雅的格式化字符串的方法,str模块的介绍中,提到格式化字符串的方法str.format

,它虽然比%的格式化方式易读性强一些,但面对多个参数的长字符串时,代码还是会比较冗余。例如:

first_name = "Bruce"
last_name = "Lee"
age = 32
profession = "mixed martial artist"
introduction = "actor, director and philosopher."
print(("Hello, {first_name} {last_name}. You are {age}. " + 
       "You are a {profession} and {introduction}.") \
       .format(first_name=first_name, last_name=last_name, age=age, \
               profession=profession, introduction=introduction))

f-string 类似str.format的用法,但是代码更加简洁

first_name = "Bruce"
last_name = "Lee"
age = 32
profession = "mixed martial artist"
introduction = "actor, director and philosopher."
print(f"Hello, {first_name} {last_name}. You are {age}. \
        You are a {profession} and {introduction}.")

除此之外,还有一下几个特点

1.支持表达式计算

In : f'38 * 2 = {38 * 2}'
Out: '38 * 2 = 76'

2.支持方法和函数调用

In : a = 'string'

In : f'render my {a.upper()}'
Out: 'render my STRING'

In : f'render my {a[:3]}'
Out: 'render my str'


In : def double(s):
         return s * 2     

In : f'render my {double(a)}'
Out: 'render my stringstring'

3.对其和填充

f-string采用 {content:format} 设置字符串格式,  描述符 '<', '>', '^' 分别对应str.ljust,  str.rjust, str.center

In : a = 'string'

In : f'render my {a:<20}'
Out: 'render my string              '

In : f'render my {a:-<20}'
Out: 'render my string--------------'

In : f'render my {a:-^20}'
Out: 'render my -------string-------'

In : f'render my {a:->20}'
Out: 'render my --------------string'

其他描述符用法, 见官方文档

2. parse

说完了字符串格式化, 介绍一个pythonic 的数据抽取的第三方库, 源码地址

2.1 安装方式

pip install parse

2.2 使用方式

parse 库可以看作是对f-string的反向操作, 用{} 标记出位置, 将目标字符串对应的数据抽取出来, 可以不用写正则表达式,即可完成数据抽取. 

2.2.1 parse

和str.format的语法一致. position抓取的数据会放到Result.fixed中,命名的变量会存到Result.named中

In : from parse import parse

In : ret = parse("It's {}, I love {food}!", "It's Bruce, I love hamburger!")
In : ret.fixed
Out: ('Bruce',)
In : ret.named
Out: {'food': 'hamburger'}

2.2.2 search

search 和 re.search功能类似, 扫描目标字符串, 查找匹配的目标数据, 找不到的话返回None

# 未命名变量,匹配结果放到Result.fixed元组中
In : search('Age: {}\n', 'Name: Rufus\nAge: 42\nColor: red\n')
Out: <Result ('42',) {}>

# 未命名变量,没有匹配结果 返回None
In : search('Ale: {}\n', 'Name: Rufus\nAge: 42\nColor: red\n')

# 命名变量,匹配结果放到Result.named 字典中
In : search('Age: {age}\n', 'Name: Rufus\nAge: 42\nColor: red\n')
Out: <Result () {'age': '42'}>

# 将抽取数据格式转换成为数字
In : search('Age: {age:d}\n', 'Name: Rufus\nAge: 42\nColor: red\n')
Out: <Result () {'age': 42}>

2.2.3 findall

功能同 re.findall

In : ''.join(r[0] for r in findall(">{}<", "<p>the <b>bold</b> text</p>"))
Out: 'the bold text'

2.2.4 compile

功能同 re.compile

>>> from parse import compile
>>> p = compile("It's {}, I love it!")
>>> print(p)
<Parser "It's {}, I love it!">
>>> p.parse("It's spam, I love it!")
<Result ('spam',) {}>

 3. 总结

使用f-string和parse,来更加优雅的使用渲染和抽取,提高代码的可读性.

f-string  ==  更简单易用的str.format

parse == 可读性更好的re

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值