社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

Python 技巧 | 如何优雅处理多行字符串

未闻Code • 3 年前 • 485 次点击  

工作中遇到需求,需要将爬取设备的状态展现出来,为了输出美观,我想将其以树枝的形状展现,如图所示:



首先不考虑设备类型,只考虑所有状态的分布。为了让字符串不要包含当前缩进里的空格,我们必须将代码按下面的方式进行组织:



可以看出,视觉效果被狠狠地破坏了,一点都不美丽,我不允许。


搜索发现,其实有蛮多方法可以解决这个问题,比如将这个多行字符串设置为全局变量,但总感觉差点意思。一个好办法就是今天的主题 —— 标准库 textwrap 中的 dedent 方法,它会删除字符串左侧的空白缩进,从而获得美丽的视觉效果,代码如图,效果自己想象:



应用如此美丽的方法后,私认为万事俱备,只要将品牌对应信息用前面的 |-- \n 拼接,这不就一碟小菜?但事实并非如此:




事实上,textwrap 库的  dedent 方法对多行传入字符串的换行符并不适配 ,它还是会狠狠地把你扔到最前面!我理解为 detent 方法自身的不足。


接受现实后,我开始尝试寻找新的方法,毕竟我舍不得这美丽的缩进,经过多种方法的尝试,最终选定方案如下:




str 类型的 maketrans 方法可以建立替换字符的规则,字符串可以调用自带的 translate 方法应用规则。



需要注意的是,将 \n 替换为 \n     |-- 时,空格数量对应的是 离最前面的距离,毕竟 textwrap.dedent 方法的缺陷就在这里!

END

未闻 Code·知识星球开放啦!

一对一答疑爬虫相关问题

职业生涯咨询

面试经验分享

每周直播分享

......

未闻 Code·知识星球期待与你相见~

一二线大厂在职员工

十多年码龄的编程老鸟

国内外高校在读学生

中小学刚刚入门的新人

“未闻 Code技术交流群”等你来!

入群方式:添加微信“mekingname”,备注“粉丝群”(谢绝广告党,非诚勿扰!)

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/129885
 
485 次点击