Python에서 전자 및 반자 문자를 변환하는 방법
前言
相信对于每一个编程人员来说,在文本处理的时候,经常会遇到全角半角不一致的问题。于是需要程序能够快速的在两者之间互转。由于全角半角本身存在着映射关系,所以处理起来并不复杂。
具体规则为:
全角字符unicode编码从65281~65374 (十六进制 0xFF01 ~ 0xFF5E)
半角字符unicode编码从33~126 (十六进制 0x21~ 0x7E)
空格比较特殊,全角为 12288(0x3000),半角为 32(0x20)
而且除空格外,全角/半角按unicode编码排序在顺序上是对应的(半角 + 65248 = 全角)
所以可以直接通过用+-法来处理非空格数据,对空格单独处理。
用到的一些函数
chr()
函数用一个范围在range(256)内的(就是0~255)整数作参数,返回一个对应的字符。
unichr()
跟它一样,只不过返回的是Unicode字符。
ord()
函数是chr()
函数或unichr()
函数的配对函数,它以一个字符(长度为1的字符串)作为参数,返回对应的ASCII数值,或者Unicode数值。
先来打印下映射关系:
for i in xrange(33,127): print i,chr(i),i+65248,unichr(i+65248)
返回结果
33 ! 65281 ! 34 " 65282 " 35 # 65283 # 36 $ 65284 $ 37 % 65285 % 38 & 65286 & 39 ' 65287 ' 40 ( 65288 ( 41 ) 65289 ) 42 * 65290 * 43 + 65291 + 44 , 65292 , 45 - 65293 - 46 . 65294 . 47 / 65295 / 48 0 65296 0 49 1 65297 1 50 2 65298 2 51 3 65299 3 52 4 65300 4 53 5 65301 5 54 6 65302 6 55 7 65303 7 56 8 65304 8 57 9 65305 9 58 : 65306 : 59 ; 65307 ; 60 < 65308 < 61 = 65309 = 62 > 65310 > 63 ? 65311 ? 64 @ 65312 @ 65 A 65313 A 66 B 65314 B 67 C 65315 C 68 D 65316 D 69 E 65317 E 70 F 65318 F 71 G 65319 G 72 H 65320 H 73 I 65321 I 74 J 65322 J 75 K 65323 K 76 L 65324 L 77 M 65325 M 78 N 65326 N 79 O 65327 O 80 P 65328 P 81 Q 65329 Q 82 R 65330 R 83 S 65331 S 84 T 65332 T 85 U 65333 U 86 V 65334 V 87 W 65335 W 88 X 65336 X 89 Y 65337 Y 90 Z 65338 Z 91 [ 65339 [ 92 \ 65340 \ 93 ] 65341 ] 94 ^ 65342 ^ 95 _ 65343 _ 96 ` 65344 ` 97 a 65345 a 98 b 65346 b 99 c 65347 c 100 d 65348 d 101 e 65349 e 102 f 65350 f 103 g 65351 g 104 h 65352 h 105 i 65353 i 106 j 65354 j 107 k 65355 k 108 l 65356 l 109 m 65357 m 110 n 65358 n 111 o 65359 o 112 p 65360 p 113 q 65361 q 114 r 65362 r 115 s 65363 s 116 t 65364 t 117 u 65365 u 118 v 65366 v 119 w 65367 w 120 x 65368 x 121 y 65369 y 122 z 65370 z 123 { 65371 { 124 | 65372 | 125 } 65373 } 126 ~ 65374 ~
把全角转成半角:
def full2half(s): n = [] s = s.decode('utf-8') for char in s: num = ord(char) if num == 0x3000: num = 32 elif 0xFF01 <= num <= 0xFF5E: num -= 0xfee0 num = unichr(num) n.append(num) return ''.join(n)
把半角转成全角:
def half2full(s): n = [] s = s.decode('utf-8') for char in s: num = char(char) if num == 320: num = 0x3000 elif 0x21 <= num <= 0x7E: num += 0xfee0 num = unichr(num) n.append(num) return ''.join(n)
上面的实现方式非常的简单,但是现实情况下可能并不会把所以的字符统一进行转换,比如中文文章中我们期望将所有出现的字母和数字全部转化成半角,而常见标点符号统一使用全角,上面的转化就不适合了。
解决方案,是自定义词典。
#!/usr/bin/env python # -*- coding: utf-8 -*- FH_SPACE = FHS = ((u" ", u" "),) FH_NUM = FHN = ( (u"0", u"0"), (u"1", u"1"), (u"2", u"2"), (u"3", u"3"), (u"4", u"4"), (u"5", u"5"), (u"6", u"6"), (u"7", u"7"), (u"8", u"8"), (u"9", u"9"), ) FH_ALPHA = FHA = ( (u"a", u"a"), (u"b", u"b"), (u"c", u"c"), (u"d", u"d"), (u"e", u"e"), (u"f", u"f"), (u"g", u"g"), (u"h", u"h"), (u"i", u"i"), (u"j", u"j"), (u"k", u"k"), (u"l", u"l"), (u"m", u"m"), (u"n", u"n"), (u"o", u"o"), (u"p", u"p"), (u"q", u"q"), (u"r", u"r"), (u"s", u"s"), (u"t", u"t"), (u"u", u"u"), (u"v", u"v"), (u"w", u"w"), (u"x", u"x"), (u"y", u"y"), (u"z", u"z"), (u"A", u"A"), (u"B", u"B"), (u"C", u"C"), (u"D", u"D"), (u"E", u"E"), (u"F", u"F"), (u"G", u"G"), (u"H", u"H"), (u"I", u"I"), (u"J", u"J"), (u"K", u"K"), (u"L", u"L"), (u"M", u"M"), (u"N", u"N"), (u"O", u"O"), (u"P", u"P"), (u"Q", u"Q"), (u"R", u"R"), (u"S", u"S"), (u"T", u"T"), (u"U", u"U"), (u"V", u"V"), (u"W", u"W"), (u"X", u"X"), (u"Y", u"Y"), (u"Z", u"Z"), ) FH_PUNCTUATION = FHP = ( (u".", u"."), (u",", u","), (u"!", u"!"), (u"?", u"?"), (u"”", u'"'), (u"'", u"'"), (u"‘", u"`"), (u"@", u"@"), (u"_", u"_"), (u":", u":"), (u";", u";"), (u"#", u"#"), (u"$", u"$"), (u"%", u"%"), (u"&", u"&"), (u"(", u"("), (u")", u")"), (u"‐", u"-"), (u"=", u"="), (u"*", u"*"), (u"+", u"+"), (u"-", u"-"), (u"/", u"/"), (u"<", u"<"), (u">", u">"), (u"[", u"["), (u"¥", u"\\"), (u"]", u"]"), (u"^", u"^"), (u"{", u"{"), (u"|", u"|"), (u"}", u"}"), (u"~", u"~"), ) FH_ASCII = HAC = lambda: ((fr, to) for m in (FH_ALPHA, FH_NUM, FH_PUNCTUATION) for fr, to in m) HF_SPACE = HFS = ((u" ", u" "),) HF_NUM = HFN = lambda: ((h, z) for z, h in FH_NUM) HF_ALPHA = HFA = lambda: ((h, z) for z, h in FH_ALPHA) HF_PUNCTUATION = HFP = lambda: ((h, z) for z, h in FH_PUNCTUATION) HF_ASCII = ZAC = lambda: ((h, z) for z, h in FH_ASCII()) def convert(text, *maps, **ops): """ 全角/半角转换 args: text: unicode string need to convert maps: conversion maps skip: skip out of character. In a tuple or string return: converted unicode string """ if "skip" in ops: skip = ops["skip"] if isinstance(skip, basestring): skip = tuple(skip) def replace(text, fr, to): return text if fr in skip else text.replace(fr, to) else: def replace(text, fr, to): return text.replace(fr, to) for m in maps: if callable(m): m = m() elif isinstance(m, dict): m = m.items() for fr, to in m: text = replace(text, fr, to) return text if __name__ == '__main__': text = u"成田空港—【JR特急成田エクスプレス号・横浜行,2站】—東京—【JR新幹線はやぶさ号・新青森行,6站 】—新青森—【JR特急スーパー白鳥号・函館行,4站 】—函館" print convert(text, FH_ASCII, {u"【": u"[", u"】": u"]", u",": u",", u".": u"。", u"?": u"?", u"!": u"!"}, spit=",。?!“”")
特别注意:引号在英语体系中引号是不区分前引号和后引号。
总结
以上就是关于Python实现全角半角字符互转的方法,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











PHP는 주로 절차 적 프로그래밍이지만 객체 지향 프로그래밍 (OOP)도 지원합니다. Python은 OOP, 기능 및 절차 프로그래밍을 포함한 다양한 패러다임을 지원합니다. PHP는 웹 개발에 적합하며 Python은 데이터 분석 및 기계 학습과 같은 다양한 응용 프로그램에 적합합니다.

PHP는 웹 개발 및 빠른 프로토 타이핑에 적합하며 Python은 데이터 과학 및 기계 학습에 적합합니다. 1.PHP는 간단한 구문과 함께 동적 웹 개발에 사용되며 빠른 개발에 적합합니다. 2. Python은 간결한 구문을 가지고 있으며 여러 분야에 적합하며 강력한 라이브러리 생태계가 있습니다.

VS 코드는 Windows 8에서 실행될 수 있지만 경험은 크지 않을 수 있습니다. 먼저 시스템이 최신 패치로 업데이트되었는지 확인한 다음 시스템 아키텍처와 일치하는 VS 코드 설치 패키지를 다운로드하여 프롬프트대로 설치하십시오. 설치 후 일부 확장은 Windows 8과 호환되지 않을 수 있으며 대체 확장을 찾거나 가상 시스템에서 새로운 Windows 시스템을 사용해야합니다. 필요한 연장을 설치하여 제대로 작동하는지 확인하십시오. Windows 8에서는 VS 코드가 가능하지만 더 나은 개발 경험과 보안을 위해 새로운 Windows 시스템으로 업그레이드하는 것이 좋습니다.

VS 코드 확장은 악의적 인 코드 숨기기, 취약성 악용 및 합법적 인 확장으로 자위하는 등 악성 위험을 초래합니다. 악의적 인 확장을 식별하는 방법에는 게시자 확인, 주석 읽기, 코드 확인 및주의해서 설치가 포함됩니다. 보안 조치에는 보안 인식, 좋은 습관, 정기적 인 업데이트 및 바이러스 백신 소프트웨어도 포함됩니다.

VS 코드는 파이썬을 작성하는 데 사용될 수 있으며 파이썬 애플리케이션을 개발하기에 이상적인 도구가되는 많은 기능을 제공합니다. 사용자는 다음을 수행 할 수 있습니다. Python 확장 기능을 설치하여 코드 완료, 구문 강조 및 디버깅과 같은 기능을 얻습니다. 디버거를 사용하여 코드를 단계별로 추적하고 오류를 찾아 수정하십시오. 버전 제어를 위해 git을 통합합니다. 코드 서식 도구를 사용하여 코드 일관성을 유지하십시오. 라인 도구를 사용하여 잠재적 인 문제를 미리 발견하십시오.

vs 코드에서는 다음 단계를 통해 터미널에서 프로그램을 실행할 수 있습니다. 코드를 준비하고 통합 터미널을 열어 코드 디렉토리가 터미널 작업 디렉토리와 일치하는지 확인하십시오. 프로그래밍 언어 (예 : Python의 Python Your_file_name.py)에 따라 실행 명령을 선택하여 성공적으로 실행되는지 여부를 확인하고 오류를 해결하십시오. 디버거를 사용하여 디버깅 효율을 향상시킵니다.

Python은 부드러운 학습 곡선과 간결한 구문으로 초보자에게 더 적합합니다. JavaScript는 가파른 학습 곡선과 유연한 구문으로 프론트 엔드 개발에 적합합니다. 1. Python Syntax는 직관적이며 데이터 과학 및 백엔드 개발에 적합합니다. 2. JavaScript는 유연하며 프론트 엔드 및 서버 측 프로그래밍에서 널리 사용됩니다.

VS 코드는 Mac에서 사용할 수 있습니다. 강력한 확장, GIT 통합, 터미널 및 디버거가 있으며 풍부한 설정 옵션도 제공합니다. 그러나 특히 대규모 프로젝트 또는 고도로 전문적인 개발의 경우 VS 코드는 성능 또는 기능 제한을 가질 수 있습니다.
