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) 全角数字主要用于中文排版,使数字与中文字符对齐,保持视觉上的统一。
  • 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实现半角转全角的方法示例 python如何实现全角半角的相互转换 Python全角与半角之间相互转换的方法总结 python 全角半角互换的实现示例 python3实现全角和半角字符转换的方法示例 Python实现全角半角字符互转的方法 Python实现全角半角转换的方法
  • 目录
    • 一、半角与全角数字概述
    • 二、实现方法
      • 方法1:基础字符转换(推荐)
      • 方法2:使用str.translate()(更高效)
      • 方法3:正则表达式替换
    • 三、性能比较
      • 四、完整工具类实现
        • 五、实际应用场景
          • 六、注意事项
            • 七、总结

              半角数字(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)

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

              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
              —————————————-
              原始: 没有数字的字符串
              转换: 没有数字的字符串
              —————————————-

              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月

              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实现半角转全角的方法示例
              • python如何实现全角半角的相互转换
              • Python全角与半角之间相互转换的方法总结
              • python 全角半角互换的实现示例
              • python3实现全角和半角字符转换的方法示例
              • Python实现全角半角字符互转的方法
              • Python实现全角半角转换的方法

              站内搜索