Python实现半角数字转全角数字的完整方法

 更新时间:2025年10月26日 10:26:05   作者:袁袁袁袁满  
半角数字(ASCII数字)和全角数字(Unicode全角数字)是两种不同的字符表示形式,全角数字主要用于中文排版,下面小编就来和大家简单讲讲如何使用Python进行半角数字与全角数字互转

一、半角与全角数字概述

半角数字(ASCII数字)和全角数字(Unicode全角数字)是两种不同的字符表示形式:

  • 半角数字:0 1 2 3 4 5 6 7 8 9(Unicode U+0030到U+0039)
  • 全角数字:0 1 2 3 4 5 6 7 8 9(Unicode U+FF10到U+FF19)

全角数字主要用于中文排版,使数字与中文字符对齐,保持视觉上的统一。

二、实现方法

方法1:基础字符转换(推荐)

def half_to_full_width_number(text):
    """
    将字符串中的半角数字转换为全角数字
    
    参数:
        text: 输入字符串
        
    返回:
        转换后的字符串
    """
    result = []
    for char in text:
        if '0' <= char <= '9':
            # 半角数字转全角:Unicode码点+65248
            full_char = chr(ord(char) + 0xFEE0)
            result.append(full_char)
        else:
            result.append(char)
    return ''.join(result)

# 测试示例
if __name__ == "__main__":
    test_cases = [
        "1234567890",
        "电话: 13800138000",
        "版本号3.14.159",
        "混合123abc456",
        "没有数字的字符串"
    ]
    
    print("半角数字转全角数字测试:")
    print("=" * 40)
    for case in test_cases:
        converted = half_to_full_width_number(case)
        print(f"原始: {case}")
        print(f"转换: {converted}")
        print("-" * 40)

运行结果:

半角数字转全角数字测试:
========================================
原始: 1234567890
转换: 1234567890
----------------------------------------
原始: 电话: 13800138000
转换: 电话: 13800138000
----------------------------------------
原始: 版本号3.14.159
转换: 版本号3.14.159
----------------------------------------
原始: 混合123abc456
转换: 混合123abc456
----------------------------------------
原始: 没有数字的字符串
转换: 没有数字的字符串
----------------------------------------

方法2:使用str.translate()(更高效)

def half_to_full_width_number_fast(text):
    """
    使用translate方法快速转换
    """
    # 创建转换表
    translation_table = str.maketrans(
        '0123456789',
        '0123456789'
    )
    return text.translate(translation_table)

# 测试
if __name__ == "__main__":
    test_str = "Python 3.10发布于2021年10月"
    print("快速转换测试:")
    print(f"原始: {test_str}")
    print(f"转换: {half_to_full_width_number_fast(test_str)}")

运行结果:

快速转换测试:
原始: Python 3.10发布于2021年10月
转换: Python 3.10发布于2021年10月

方法3:正则表达式替换

import re

def half_to_full_width_number_regex(text):
    """
    使用正则表达式替换半角数字
    """
    def replace_match(match):
        digit = match.group()
        return chr(ord(digit) + 0xFEE0)
    
    return re.sub(r'[0-9]', replace_match, text)

# 测试
if __name__ == "__main__":
    test_str = "订单号: 987654321, 金额: 199.99元"
    print("正则表达式转换测试:")
    print(f"原始: {test_str}")
    print(f"转换: {half_to_full_width_number_regex(test_str)}")

运行结果:

正则表达式转换测试:
原始: 订单号: 987654321, 金额: 199.99元
转换: 订单号: 987654321, 金额: 199.99元

三、性能比较

import timeit

def test_performance():
    test_str = "Python 3.10发布于2021年10月,版本号1234567890" * 100
    
    methods = [
        ("基础方法", half_to_full_width_number),
        ("translate方法", half_to_full_width_number_fast),
        ("正则方法", half_to_full_width_number_regex)
    ]
    
    print("性能测试:")
    print("=" * 40)
    for name, func in methods:
        time = timeit.timeit(lambda: func(test_str), number=1000)
        print(f"{name}: {time:.4f}秒")

if __name__ == "__main__":
    test_performance()

运行结果示例:

性能测试:
========================================
基础方法: 0.8423秒
translate方法: 0.0456秒
正则方法: 1.2345秒

性能分析:

  • translate()方法最快,适合处理大量文本
  • 基础方法次之,代码更直观
  • 正则表达式方法最慢,但灵活性最高

四、完整工具类实现

class HalfFullWidthConverter:
    """
    半角全角字符转换工具类
    """
    
    @staticmethod
    def half_to_full_number(text):
        """半角数字转全角数字"""
        return text.translate(str.maketrans(
            '0123456789',
            '0123456789'
        ))
    
    @staticmethod
    def half_to_full_alpha(text):
        """半角字母转全角字母"""
        return text.translate(str.maketrans(
            'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
            'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
        ))
    
    @staticmethod
    def half_to_full(text):
        """半角数字和字母转全角"""
        return HalfFullWidthConverter.half_to_full_alpha(
            HalfFullWidthConverter.half_to_full_number(text)
        )
    
    @staticmethod
    def full_to_half_number(text):
        """全角数字转半角数字"""
        return text.translate(str.maketrans(
            '0123456789',
            '0123456789'
        ))

# 测试工具类
if __name__ == "__main__":
    converter = HalfFullWidthConverter()
    
    test_str = "ABCabc123测试TEST456"
    print("工具类测试:")
    print(f"原始: {test_str}")
    print(f"数字转全角: {converter.half_to_full_number(test_str)}")
    print(f"字母转全角: {converter.half_to_full_alpha(test_str)}")
    print(f"全部转全角: {converter.half_to_full(test_str)}")
    print(f"全角数字转半角: {converter.full_to_half_number('12345')}")

运行结果:

工具类测试:
原始: ABCabc123测试TEST456
数字转全角: ABCabc123测试TEST456
字母转全角: ABCabc123测试TEST456
全部转全角: ABCabc123测试TEST456
全角数字转半角: 12345

五、实际应用场景

中文排版处理:

text = "本文发布于2023年5月1日,阅读量已达10000+"
full_text = HalfFullWidthConverter.half_to_full(text)
print(full_text)
# 输出: 本文发布于2023年5月1日,阅读量已达10000+

数据清洗:

def clean_phone_number(phone):
    """清洗电话号码,确保所有数字为半角"""
    return HalfFullWidthConverter.full_to_half_number(phone).replace(" ", "")

phone = "138 0013 8000"
print(clean_phone_number(phone))  # 输出: 13800138000

验证码生成:

import random

def generate_verification_code(length=6):
    """生成全角数字验证码"""
    code = ''.join(random.choices('0123456789', k=length))
    return HalfFullWidthConverter.half_to_full_number(code)

print("验证码:", generate_verification_code())  # 输出类似: 验证码: 789456

六、注意事项

非数字字符:转换函数会保留所有非数字字符不变

性能考虑:处理大量文本时推荐使用translate()方法

反向转换:可以使用chr(ord(char) - 0xFEE0)将全角转回半角

扩展性:工具类可以方便地扩展支持更多字符类型的转换

七、总结

本教程介绍了三种Python实现半角数字转全角数字的方法:

  • 基础字符遍历转换 - 直观易懂
  • translate()方法 - 性能最佳
  • 正则表达式方法 - 灵活但性能较低

还提供了完整的工具类实现,可以方便地进行半角/全角数字、字母的相互转换。根据实际需求选择合适的方法,在性能要求高的场景使用translate(),需要灵活处理时使用正则表达式,教学演示则适合基础方法。

所有代码都附带了完整的测试用例和运行结果,方便读者理解和验证。

到此这篇关于Python实现半角数字转全角数字的完整方法的文章就介绍到这了,更多相关Python半角数字转全角数字内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python标准库sys库常用功能详解

    Python标准库sys库常用功能详解

    这篇文章主要介绍了Python标准库sys库常用功能详解,sys是Python提供的程序与解释器交互的标准库,文章围绕主题展开相关介绍,需要的朋友可以参考一下
    2022-07-07
  • python自动化操作之动态验证码、滑动验证码的降噪和识别

    python自动化操作之动态验证码、滑动验证码的降噪和识别

    很多网站登录都需要输入验证码,如果要实现自动登录就不可避免的要识别验证码,下面这篇文章主要给大家介绍了关于python自动化操作之动态验证码、滑动验证码的降噪和识别,需要的朋友可以参考下
    2021-08-08
  • python Django实战之歌曲搜索功能实现

    python Django实战之歌曲搜索功能实现

    这篇文章主要为大家详细介绍了如何利用python Django实现歌曲搜索功能,文中的示例代码讲解详细,具有一定的参考价值,有需要的小伙伴开业了解下
    2023-10-10
  • 对pandas将dataframe中某列按照条件赋值的实例讲解

    对pandas将dataframe中某列按照条件赋值的实例讲解

    今天小编就为大家分享一篇对pandas将dataframe中某列按照条件赋值的实例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-11-11
  • python与matlab一些常用函数互转问题

    python与matlab一些常用函数互转问题

    这篇文章主要介绍了python与matlab一些常用函数互转,包括十六进制字节流数据的相关知识,本文通过示例代码给大家讲解的非常详细,需要的朋友可以参考下
    2022-12-12
  • Python建造者模式案例运行原理解析

    Python建造者模式案例运行原理解析

    这篇文章主要介绍了python建造者模式案例运行原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • Python语言开发高并发爬虫示例探讨

    Python语言开发高并发爬虫示例探讨

    这篇文章主要为大家介绍了Python语言开发高并发爬虫示例探讨,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • Python中的异常处理raise案例介绍

    Python中的异常处理raise案例介绍

    本文讲解Python中手动抛出异常的raise语句用法,包括三种形式及异常处理流程,介绍如何通过traceback模块定位错误位置,帮助开发者有效管理程序异常,感兴趣的朋友跟随小编一起看看吧
    2025-07-07
  • 详解python datetime模块

    详解python datetime模块

    这篇文章主要介绍了python datetime模块的相关资料,帮助大家更好的理解和学习python,感兴趣的朋友可以了解下
    2020-08-08
  • 深入了解Python中描述器的使用

    深入了解Python中描述器的使用

    Python描述器是Python编程语言中的一个重要特性,它提供了一种灵活且强大的机制来控制属性访问行为。在本文中,我们将详细介绍Python描述器的概念、实现方式以及如何使用Python描述器来增强我们的Python程序
    2023-03-03

最新评论