Python 打印的中英文字体如何对齐?

python中中英文打印对齐解决方案 超出的数量也很好理解,就是全角字符的个数,意即上述绿线的位置,上述示例包含三个全角字符,就会产出三个字符位置。在同行继续打印其他字符,字符串里边包含全角字符,那么后续的打印就会一直被前述全角字符的打印结果影响,原生的打印机制,辅助计算全角字符的数量的方法,实现的了全半角混合打印的对齐效果。把从第18 个字符的位置开始打印,这里用红线表示,所以无论全角还是半角对象,这里很明显的看到,同样的长度为3的字符,全角字符是半角字符一倍的打印长度。这个是一个右对齐的示例,print函数首先计算了打印对象的长度。 阅读详情

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


打印中英文字体如何对齐?

使用Python打印字体或者平时用word、记事本输入文本时会发现当输入中英文混写进经常出现不能对齐的情况,那么究竟是什么原因导致的?

a= '中文123'
b= 'ab123'
print(a+',',len(a))
print(b+',',len(b))
中文123, 5
ab123, 5

从打印的文本看出,带中文字符的字符串与英文字符串的长度都为5,但其打印出来的字符串宽度是不一样的。

由于中文字体的特殊结构其宽度在英文宽度下不能正常显示,中文字体的宽度是英文字母的一倍。
中文输入法在输入字符时会有全角与半角之分,全角模式下所有字符全部打印成相同宽度大小,相应的半角模式下输入中文字体时是全角(也只能是全角),但在输入英文或数字时会打印半角字符

例如:
全角模式下:中文输入法输入字
全角模式下:中文abc123
半角模式下:中文abc123
半角模式下:123456789

在上面的例子中,半角模式下发现中英混合字体与纯字母数字字体宽度仍不一样, 这是什么原因呢?
打印出来的字体宽度不一样就说明在字体样式下设计的中英字体的宽度就是不一样的,我们需要切换到中英字体宽度为等比1:2的字体样式。一般情况下可以在微软几个默认中文字体里来切换试下,比如等线字体就符合要求

在这里插入图片描述

了解了中英文混合字体宽度的问题,那么Python如何在中英字宽2:1的字体样式下将两段中英文字体对齐呢?


在Python下对齐打印中英文混合字符串

如下所示:打印出中英字符在字符串中对齐效果
在这里插入图片描述

1、初步想法:利用字符串函数Format()格式化输出

#强制左对齐
print('{:~>50}{:.<30}'.format(PrintCNChar('#强制左对齐:'),123456))
#强制右对齐
print('{:~>50}{:.>30}'.format(PrintCNChar('#强制左对齐:'),123456))
#强制居中
print('{:~>50}{:.^30}'.format(PrintCNChar('#强制居中:'),123456))
#强制在数字与符号之间放置填充,只对数字有效
print('{:~>50}{:.=+30}'.format('#强制在数字与符号之间放置填充:',123456))

输出效果如下:

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#强制左对齐:123456........................
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#强制左对齐:........................123456
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#强制居中:............123456............
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#强制在数字与符号之间放置填充:+.......................123456

显然输出结果没有对齐

2、字符串format函数打印分析

仔细观察打印的字符可以看出在字符串Format函数中是将中文字符与英文字符同时看作是一个字符的,也就是说其只是按照字符个数来打印固定长度的字符串,其最终结果的打印长度其实是不考虑的。
如果按照中英文等比2:1字体打印中英文字符其最终长度也不同,因为如果有中文或中文字符比较多的情况下同样会导致长度不同

3、创建一个简单的中英文对齐打印的函数

既然用字符串格式化无法对齐,那么就不能适用于对齐的应用,正确的方法应该统计所要打印的字符串中中文字符与英文字符个数,然后再将中英字符数乘以2,将最终的结果长度与打印长度(半角下长度)对比将剩余的字符补足,得到我们想要的结果

def PrintCNChar(string,length=0, sep=' '):
    iChineseCharNo = 0
    iEnglishCahrNo = 0
    iTotalCharNo =0
    if length ==0:
        return string

    for char in string:
        if u'\u4e00'<= char <=u'\u9fa5':#判断是否为中文字符,注意要用utf-8编码
           iChineseCharNo+=1
        else:
            iEnglishCahrNo+=1

    iTotalCharNo = iChineseCharNo*2+ iEnglishCahrNo

    if iTotalCharNo <= length:
        return sep*(length-iTotalCharNo)+string
    else:
        return 'error: length is less than string length' 

if __name__== '__main__':

    s1 = '{}'.format('#强制左对齐:')
    s2 = '{}'.format('#强制右对齐:')
    s3 = '{}'.format('#强制居中:')
    s4 = '{}'.format('#强制在数字与符号之间放置填充:')

    print(PrintCNChar(s1,50,'~')+'{:.<30}'.format(123456))
    print(PrintCNChar(s2,50,'~')+'{:.>30}'.format(123456))
    print(PrintCNChar(s3,50,'~')+'{:.^30}'.format(123456))
    print(PrintCNChar(s4,20,'~')+'{:.=+30}'.format(123456))

来看下最终效果

在这里插入图片描述


总结

如果要将打印的中英文字符对齐,要注意两方面:
1、全角及半角的区别
2、不同的字体样式会影响到打印字体的宽度,但中文字体总会比英文字符要宽,如果需要对齐要找中英1:2比例的字体样式

如何在Python中对齐中英文混排字符串 在Python中对齐中英文混排字符串的理论与实现 阅读详情

相关推荐

Python 处理中英文对齐

中英文对齐美化

qq_31658019的博客 682

python 中英混合字符串如何对齐 左对齐 居中对齐 右对齐

Python 全角半角混合 全半角混合 中英混合 字符串对齐 字符串左对齐 字符串右对齐 字符串居中对齐 字符串对齐打印 字符串打印

dyy123 1311

Python打印避坑指南:解决win32ui打印空白、错位问题,并教你获取打印机真实可打印区域

本文详细解析Python调用打印机时常见的空白、错位问题,提供从获取打印机真实可打印区域到字体渲染、坐标系定位的完整解决方案。通过实战代码示例和调试技巧,帮助开发者精准控制打印输出,特别适用于标签打印等需要高精度排版的场景。

weixin_28224217的博客 355

python 中英文输出 对齐

目录)问题描述问题最初代码:最初格式原因解决方法一代码:格式解决方法二 (wrong 只是巧合)代码格式参考文章 问题描述 问题 products = [["iphone", 6888], ["MacPro", 14800], ["小米6", 2499], ["Coffee", 31], ["Book", 60], ["Nike", 699]] 将列表中的数据按图中格式对齐 最初代码: products = [["iphone", 6888], ["MacPro", 14800], ["小米6", 24

qq_45936312的博客 3042

Python-docx字体设置全解析:从基础原理到专业排版实战

在Python办公自动化领域,字体设置是文档生成的核心技术之一,它直接决定了输出文档的专业性与美观度。其原理基于文档对象模型,通过操作Run对象的Font属性来实现精细化的格式控制。这项技术的价值在于能够将程序生成的文档从“能用”提升到“好用”的层次,满足正式报告、商业文档等场景的排版需求。在实际应用中,开发者常面临中文字体兼容性、样式继承、批量修改等挑战。本文聚焦python-docx库,深入探讨字体设置的最佳实践,涵盖Run对象操作、样式定义、中英文字体分离等关键技巧,并提供了实战避坑指南,帮助开发者高

weixin_34372728的博客 388

python常见的中英文对照

python 大蟒蛇 downlaods 下载 install 安装 customize 自定义 path 环境变量:路径 optional 可选的 feature 特性特点 documentation 文档 associate 关联 shortcuts 快捷方式 setup 安装 successful 成功 library 库 scripts 脚本 prin...

sunny___i的博客 7272

Python 直驱打印机:从字体精调到标签排版,实战避坑指南

本文详细介绍了如何使用Python直驱打印机进行字体精调和标签排版,提供实战避坑指南。通过pywin32库控制打印机设备上下文,实现精确的字体控制和标签排版,适用于批量生成标签贴、定制化报表等场景,大幅提升打印效率和自动化水平。

weixin_28689193的博客 338

解决Matplotlib字体缺失警告:从原理到实践的Times New Roman配置指南

在数据可视化与科学计算领域,字体管理是确保图表输出专业性与一致性的关键技术环节。其核心原理在于绘图库通过字体缓存机制在系统路径中查找并加载指定字体文件,当目标字体缺失时会触发回退机制,这直接影响了学术出版、企业报告等场景的格式规范遵循。从技术价值看,跨平台字体环境的统一配置能提升代码的可移植性与协作效率,避免因字体缺失导致的格式错乱问题。本文聚焦于Matplotlib中常见的Times New Roman字体缺失警告,通过解析字体查找路径、缓存更新逻辑与动态加载方案,为Python数据可视化项目提供从临时规

cigang4063的博客 369

Python打印对齐及打印一条无分割的表格线

关于Python打印对齐及打印一条无分割的表格线 一、对齐打印 先给大家看个小demo就知道是什么问题了: print('{:^8}\t\t{:^8}\t\t{:^8}\t\t{:^8}\t\t{:^8}\t\t'.format('', '指标1', '指标2', '指标3', '指标4')) print('{:^8}\t\t{:.^f}\t\t{:.^f}\t\t{:.^f}\t\t{:.^f}\t\t'.format('关键技术词', np.random.random(), np.random.rand

m0_48054242的博客 1260

字体号数与像素对应关系

英文字体的1磅,相当于1/72 英寸,约等于1/2.8mm。 12PT的字打印出来约为4.2mm。网页中12px的字才相当于12像素。 虽然 四号=(14/72)*96=18.6px 更接近 19px,但是因为 18px 是点阵,所以系统还是优先显示点阵字号的。 换句话说:四号=18px 中文字号VS英文字号(磅)VS像素值的对应关系: 中文字号VS英文字号(磅)VS像素值的对应关系: 八...

技术联盟 9912

解决Python 中英文混输格式对齐的问题

今天小编就为大家分享一篇解决Python 中英文混输格式对齐的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

python基础和前端中英文对照

python中英文对照 python 大蟒蛇 downlaods 下载 install 安装 customize 自定义 path 环境变量:路径 optional 可选的 feature 特性特点 documentation 文档 associate 关联 shortcuts 快捷方式 setup 安装 successful 成功 library 库 scripts 脚本 print 打印 he...

python吴彦祖的博客 1122

Yolov5 多边形标签转换,所有json文件自动转成txt格式[详细过程]

注:labelme是麻省理工(MIT)的计算机科学和人工智能实验室(CSAIL)研发的图像标注工具,人们可以使用该工具创建定制化标注任务或执行图像标注,项目源代码已经开源。通过labelme对图进行标注后,得到的是json文件,而Yolov5对数据进行模型构建的时候,读取需要的是txt格式的文件。txt_outer_path——保存txt文本的文件夹的绝对路径。json_name——json_name是json文本的名字。json_floder——读取json的文件夹的绝对路径。

Pandas_007的博客 1万+

Maple Mono字体:3步解决程序员字体选择的终极难题

你是否曾在代码编辑器中不断切换字体,只为找到一个既美观又实用的编程字体?Maple Mono字体正是为解决这一痛点而生的开源等宽字体,它通过圆角设计、智能连字和完整的图标支持,为开发者提供了极致的编码体验。无论你是前端工程师、后端开发者还是系统管理员,这款字体都能让你的代码排版更加优雅、可读性更强。 ## 第一步:识别你的开发场景,选择正确的字体版本 面对Maple Mono众多的版本选择,很

gitblog_01190的博客 956

嵌入式开发必看:STM32 DMA双缓冲配置全攻略(含CubeMX教程)

本文详细解析了STM32 DMA双缓冲机制的原理与优势,并提供了基于CubeMX的完整配置教程。通过硬件自动切换两个缓冲区,实现DMA传输与CPU处理的真正并行,有效降低中断频率,提升高速数据采集、音频流处理等场景下的系统效率和实时性。

weixin_29212429的博客 174

深入解析YT8521S千兆以太网PHY芯片的设计与调试要点

本文深入解析了YT8521S千兆以太网PHY芯片的设计与调试要点。重点剖析了硬件设计中的电源方案、RGMII接口电平配置(尤其是1.8V电平方案)以及PCB布局布线等关键细节,并提供了从硬件检查、驱动配置到性能测试的完整调试流程,帮助工程师规避常见陷阱,实现稳定可靠的千兆网络连接。

weixin_29190573的博客 689

Python3 中英文列表输出对齐

由于中文占全角宽度,一般的字符,比如英文占半角宽度,所以我们需要一个函数来调整字符串长度,使得字符串长度相同。这里采用的是补空格的方式

whu2020302021147的博客 1840

智能车学习日记【二】————十字和斜入十字

智能车学习日记【二】————十字和斜入十字 文章目录 智能车学习日记【二】————十字和斜入十字 前言 一、普通十字补线 二、斜入十字 1.判断是否为斜入十字和斜入十字类型 2.找斜入十字拐点 总结 前言 经过了一个多月的学习,小白的我终于也是能较稳定调出了2.8m以上的四轮车,过程中也遇到了很多困难,其中就有十字补线和斜入十字补线。尤其是斜入十字也是困扰了我快一周,现在和大家分享一下我处理斜入十字的方法(我的方法其实还有很多漏洞需要改进,仅供大家参考理解一下,欢迎各位在评论区指点出可

bsefef的博客 2743

CANN Runtime CMO 缓存操作接口解析:aclrtCmoAsync 系列 API 使用与实现原理

CMO(Cache Maintenance Operations,缓存维护操作)是 CANN Runtime 提供的 Device 侧缓存刷新与失效接口族,用于在 Host 侧对 NPU 上的 Cache 与 DDR 内存做显式的预取、写回、失效等控制。本文以 [11-06_CMO_memory_operation.md](https://link.gitcode.com/i/f389174d8d

gitblog_01148的博客 974

碳化硅外延层厚度测量:红外干涉光谱与FFT技术详解

薄膜厚度测量是半导体制造中的关键工艺控制环节,其核心原理基于光的干涉现象。当光在薄膜上下界面反射并叠加时,会产生与厚度相关的干涉条纹。通过分析这些条纹,可以非接触、无损地获取薄膜的精确厚度信息。这项技术的核心价值在于实现了对关键工艺参数的在线、快速监控,对于提升器件性能与生产良率至关重要。在第三代半导体,尤其是碳化硅功率器件的制造中,外延层厚度直接决定了器件的击穿电压和导通电阻等核心性能。红外干涉光谱法因其对碳化硅材料在红外波段的良好透过性,成为该领域主流的厚度测量方案。通过快速傅里叶变换(FFT)对采集到

weixin_29032489的博客 309

【2025年华为秋招(AI)-11月19日-第一题(100分)- 选择题】(题目+思路+Java&C++&Python解析+在线测试)

本文摘要: 本文包含15道单选题和5道多选题,涵盖机器学习、深度学习、概率统计和数值计算等多个领域。单选题涉及Transformer的Softmax层作用、最小二乘法拟合、概率密度计算、注意力机制、反向传播问题、ROC曲线用途、截断误差来源等知识点。多选题考察大模型训练技术、BERT/GPT比较、强化学习对齐方法、CNN常见层以及PCA特性等内容。题目设计注重理论与实践结合,既包含数学推导,又关注前沿技术应用,全面检验读者对机器学习核心概念的理解能力。正确答案均附有详细解析,帮助理解相关技术原理。

m0_73659489的博客 147

字体选得好,开发效率高

大家好,欢迎来到 Crossin的编程教室 !经常有人在我的视频和文章下留言说:你IDE用的什么字体?还挺好看的。今天就统一回复下,我用的字体是 monaco今天顺便再给大家推荐几款不错的编程字体。一款好的编程字体通常要满足以下几个条件:1. 首先要是等宽字体,也就是不同字母所占的屏幕宽度是一样的。这样代码看起来更整齐,尤其对于Python这种以缩进划分代码逻辑的语言来说更为重要。2. 其次不能有...

Crossin的编程教室 1085

【2024遥感应用组一等奖】基于时空融合和水量平衡法的若尔盖高原水源涵养功能评价

考虑到水源涵养的概念和尺度特征、数据的可获得性、模型的模拟精度等,构建了一种基于遥感、气象和水量平衡原理的草原湿地水源涵养评价方法,估算若尔盖湿地近23年(2000-2022)来的水源涵养量。若尔盖湿地是我国黄河源区的重要水源地,所以本研究以若尔盖湿地的水源涵养功能评估为科学问题,基于遥感数据、GIS数据等,利用水量平衡原理,发展计算简单、便捷、数据易获取的“水源涵养估算方法”,科学估算若尔盖湿地水源涵养服务量,探究其时空动态变化趋势及其影响因素;公式中,Z1和Z2为两个不同高度面的高度,u为摩擦速率;

JData_Engineer的博客 240

python-docx如何设置默认字体大小

本文介绍了使用python-docx库设置Word文档默认字体大小的方法。核心步骤是通过修改Normal样式全局设置字体,包括导入模块、创建文档、获取样式并设置字体大小,特别针对中文字体需额外配置。文章还提供了常见问题解决方案(样式未生效、中文字体显示异常、表格样式继承问题)以及高级技巧(批量设置、自定义样式、使用模板)。验证方法和调试技巧也有详细说明,帮助用户实现文档格式统一,提升办公自动化效率。关键要确保先设置样式再添加内容,并正确处理中文字体属性。

得塔云的博客 932

优化点列图(RMS半径)的操作数

优化点列图(RMS半径)的操作数

weixin_72050316的博客 2259

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

彻底解决Matplotlib字体缺失:从Times New Roman到跨平台字体配置

在数据可视化与科学计算中,字体渲染是保证图表专业性与一致性的关键技术环节。其原理在于绘图库通过系统字体路径查找并加载指定字体文件进行文本渲染。正确的字体管理对于生成符合学术出版、商业报告严格排版规范的图表具有重要价值,尤其在跨平台(如Windows、Linux、macOS)协作与部署场景下。当遇到类似“Times New Roman”等系统字体缺失时,会导致默认字体回退,影响图表视觉效果与文档统一性。本文聚焦于Matplotlib环境下的字体问题,深入解析其字体缓存机制与系统级字体配置原理,并提供从临时规避

weixin_30471561的博客 488

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

上一篇: Python 虚拟环境作用,如何在Visual Code中实现
下一篇: Python编程为什么要用uft-8?如何查看字符串的编码及进制转换
PittDing
博客等级 码龄7年 227粉丝 36原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值