python中中英文打印对齐解决方案

devtools/2024/9/20 7:27:35/ 标签: python, 开发语言

python中,有时候会出现中英文混合输出的情形,但是由于中文默认是全角格式(一个中文字符占用两个字符宽度),这会对python原生的print函数带来一些障碍。尤其是用户用print对齐输出的时候,这种差异会导致文本无法准确对齐。为了解决这种问题,这里提出一种方法。

pythonprint函数,在进行对齐处理的时候,首先需要判断字符串的长度。这个就是通常的len()函数。python在计算字符串长度的时候,任何字符都只会被算作长度1,无论全角还是半角,所以会有下面的情况:

python">> len("一二三")    
3
> len("123")
3

但是对于对于全角字符,打印宽度是两个字节,半角字符是单个字节,譬如下例:

image-20240419164046759

这里很明显的看到,同样的长度为3的字符,全角字符是半角字符一倍的打印长度。

这种差距,会影响到print的对齐打印,譬如下例:

image-20240419164446463

这个是一个右对齐的示例,print函数首先计算了打印对象的长度len(),得到了这个打印对象的长度为3(此处忽略全角和半角),所以print会从右对齐的20节点开始排布,意即print把从第18 个字符的位置开始打印,这里用红线表示,所以无论全角还是半角对象,print都会从第18 个字符的位置打印。
按照正常字符(半角),文本会在第20个字符位置完成打印,如上图的蓝线位置,但是由于全角字符的占用了更多的字符,所以这里的全角字符会占用18~23 字符位置,这样会导致打印对齐出现问题:包含全角的字符串会超出限定的界定位置。譬如上述的蓝色位置。超出的数量也很好理解,就是全角字符的个数,意即上述绿线的位置,上述示例包含三个全角字符,就会产出三个字符位置。

以此类推,如果print在同行继续打印其他字符,字符串里边包含全角字符,那么后续的打印就会一直被前述全角字符的打印结果影响,
image-20240419165732123

这种方式也适用于全半角混合输出,示例如下:

image-20240419170059742

对应的,居中对齐模式也会有类似的影响

image-20240419172111688

了解了上述原理,用户可以根据这种特性,自动完成对于全角半角混合模式的打印对齐处理。思路是:在对齐宽度上对全角字符额外的宽度进行考虑,这样可以构建一个中英文混合模式的打印对齐。代码如下:

python">def get_number(char):count = 0for item in char:# chinese char and chinese punctuation markif 0x4E00 <= ord(item) <= 0x9FA5 or 0xFF00 <= ord(item) <=0xFFEF or 0x3000 <= ord(item) <= 0x303F:count += 1return countdef print_hybrid(char, align, length):if align=='l' or align=='left' :anchor = '<'elif align=='c' or align=='center':anchor = '^'elif align=='r' or align=='right':anchor = '>'else:ut.print_error('Not support align type. Current support is l(left), c(center), r(right)')return -1add_len = get_number(char)if add_len >= length:p_len = 0else:p_len = length - add_lenreturn f'{char:{anchor}{p_len}}'

各种混合模式打印示例:
image-20240419173656030

可见,此种方法建立在print原生的打印机制,辅助计算全角字符的数量的方法,实现的了全半角混合打印的对齐效果。


http://www.ppmy.cn/devtools/2332.html

相关文章

HBase2.x学习笔记

文章目录 一、HBase 简介1、HBase 定义1.1 概述1.2 HBase 与 Hadoop 的关系1.3 RDBMS 与 HBase 的对比1.4 HBase 特征简要 2、HBase 数据模型2.1 HBase 逻辑结构2.2 HBase 物理存储结构2.3 HBase的表数据模型 3、HBase 基本架构3.1 Master3.2 Region Server3.3 Zookeeper3.4 HD…

第十四届蓝桥杯ABD题

A、阶乘求和&#xff1a; 【问题描述】 令 S 1! 2! 3! ... 202320232023! &#xff0c;求 S 的末尾 9 位数字。 提示&#xff1a;答案首位不为 0 。 【答案提交】 这是一道结果填空的题&#xff0c;你只需要算出结果后提交即可。本题的结果为一 个整数&#xff0c;在…

【QT进阶】Qt Web混合编程之CEF、QCefView简单介绍

往期回顾 【QT入门】Qt自定义控件与样式设计之自定义QLineEdit实现搜索编辑框-CSDN博客 【QT入门】Qt自定义控件与样式设计之自定义QTabWidget实现tab在左&#xff0c;文本水平的效果-CSDN博客 【QT进阶】Qt Web混合编程之CEF、QCefView简单介绍 一、web组件 Web组件是一种用…

webpack--区分开发环境和生产环境

区分开发和生产环境 初步使用 可以直接配置两个文件&#xff1a; dev const path require("path"); const { VueLoaderPlugin } require("vue-loader"); const HtmlWebpackPlugin require("html-webpack-plugin"); const { DefinePlugin…

Python 学习笔记(九)—— 操作系统和环境

目录 一、os模板 二、platform模块 三、扩展第三方库psutil 四、操作系统信息 4.1 使用platform模块 4.2 使用sys模块 4.3 使用os模块 4.4 使用subprocess模块 Python操作系统和环境主要指的是使用Python进行系统级操作和管理的相关功能和工具。 Python提供了许多用于…

ubuntu下的串口调试工具cutecom

系统&#xff1a;ubuntu20.04 &#xff08;1&#xff09;接线 使用 rs485&#xff1c;-----> rs232 转接口&#xff08; 设备直接出来的是rs485&#xff09;&#xff0c;电脑主机接入一根 rs232&#xff1c;-----> USB口 连接线&#xff0c;ubuntu系统下打开 termin…

博客系统项目测试(selenium+Junit5)

在做完博客系统项目之后&#xff0c;需要对项目的功能、接口进行测试&#xff0c;利用测试的工具&#xff1a;selenium以及Java的单元测试工具Junit进行测试&#xff0c;下面式测试的思维导图&#xff0c;列出该项目需要测试的所有测试用例&#xff1a; 测试结果&#xff08;全…

五个大学生必备的学习工具

五个大学生必备的学习辅助工具&#xff0c;做笔记、画思维导图、翻译、转格式、AI写作通通都能帮你解决&#xff01; 1、学霸必备思维导图–迅捷画图 直达链接>>> https://www.liuchengtu.com/ 可以下载软件&#xff0c;也可以直接收藏网址直接使用网页版&#xff0…

Android开发——ListView

activity_main.xml <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_height"match_parent"android:layout_width"match_parent"…

前端用 HTML5 + CSS3 + JavaScript,后端连接什么数据库更简单?

当前端使用 HTML5、CSS3 和 JavaScript 进行开发时&#xff0c;后端连接何种数据库是一个非常重要的问题&#xff0c;因为数据库的选择直接影响着后端代码的编写、数据存储与查询的效率以及系统的可维护性。 1. 关系型数据库&#xff08;SQL 数据库&#xff09;&#xff1a; …

如何快速打开Github

为什么我们打开Github速度很慢&#xff1f;很卡&#xff0c;甚至于访问不了&#xff0c;原因是中间有个域名通过DNS解析的过程&#xff0c;将域名解析为对应的ip地址&#xff0c;主要时间都是花在了DNS解析上了。 我们在浏览器输入 GitHub 的网址时&#xff0c;会向 DNS 服务器…

外贸企业邮箱有什么用?如何选择适合的外贸企业邮箱?

外贸公司每天都需要与各个国家的客户打交道&#xff0c;通过邮箱聊天、谈合作。由于语言、文化差异&#xff0c;一个小错误可能会致使业务失败和数据泄漏风险。做为外贸企业的重要沟通工具&#xff0c;企业电子邮件的功效是显而易见的。那样&#xff0c;外贸企业邮箱有什么用&a…

flutter知识点---生命周期

Flutter 应用的生命周期涉及两个层面&#xff1a;Widget&#xff08;组件&#xff09;的生命周期 和 应用程序&#xff08;App&#xff09;的生命周期。下面分别对这两个方面进行详细介绍&#xff1a; Widget&#xff08;组件&#xff09;的生命周期 Flutter 中的 Widget 是构…

【爬虫开发】爬虫从0到1全知识md笔记第5篇:Selenium课程概要,selenium的其它使用方法【附代码文档】

爬虫开发从0到1全知识教程完整教程&#xff08;附代码资料&#xff09;主要内容讲述&#xff1a;爬虫课程概要&#xff0c;爬虫基础爬虫概述,,http协议复习。requests模块&#xff0c;requests模块1. requests模块介绍,2. response响应对象,3. requests模块发送请求,4. request…

【电力工程】电力大数据和云架构智能AI服务平台研发建设项目可行性研究报告范例

1、项目概况 本项目拟进行基于电力大数据和云架构的智能 AI 服务平台的研究,具体包括电力多元大数据中心、技术中台、数据中台和智能 AI 中台,基于电力大数据云平台基础构建 BI 可视化开发平台和智能 AI 服务平台。 该项目的实施旨在引领公司在大数据领域发展的新趋势,从功…

循环双链表的操作

归纳编程学习的感悟&#xff0c; 记录奋斗路上的点滴&#xff0c; 希望能帮到一样刻苦的你&#xff01; 如有不足欢迎指正&#xff01; 共同学习交流&#xff01; &#x1f30e;欢迎各位→点赞 &#x1f44d; 收藏⭐ 留言​&#x1f4dd; 每一个裂缝都是为透出光而努力&#…

总结|性能优化思路及常用工具及手段

性能优化是降低成本的手段之一&#xff0c;每年大促前业务平台都会组织核心链路上的应用做性能优化&#xff0c;一方面提升系统性能&#xff0c;另外一方面对腐化的代码进行清理。现结合业务平台性能优化的经验&#xff0c;探讨一下性能优化的思路及常用工具及手段。性能优化本…

Linux错误(3)Linux里IP套接字sendmsg出现EPERM错误

Linux错误(3)之Linux里IP套接字sendmsg出现EPERM错误 Author: Once Day Date: 2024年2月21日 漫漫长路才刚刚开始… 全系列文章可参考专栏: Mermaid使用指南_Once_day的博客-CSDN博客 参考文档: c - How to fix EPERM error when trying to use sendto() with Ethernet so…

设置表格高度后,数值改变但实际不变

1.选中表格 2.点击“开始”——>“段落设置”的选项启动按钮&#xff0c;设置为单倍行距 3.可以看到&#xff0c;表格的行高被调小了。

云上攻防对象存储Bucket桶任意上传域名接管AccessKey泄漏

0x00 对象存储简介 对象存储是一种用于存储和管理大量非结构化数据的技术&#xff0c;也被称为云存储。它将数据以对象的形式进行存储&#xff0c;并为每个对象分配唯一的标识符。与传统的文件系统不同&#xff0c;对象存储不采用多层级的文件结构&#xff0c;而是采用一个称为…