版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第4章Unicode与字符串计划Unicode简介Python字符串的常用操作Python2.x与Python3.x在支持Unicode方面的异同正则表达式Unicode简介Bit(比特、位)Thebitisabasicunitofinformationincomputinganddigitalcommunications.Abitcanhaveonlyoneoftwovalues,andmaythereforebephysicallyimplementedwithatwo-statedevice.电路的高电平状态与低电平状态电容的充电状态与放电状态磁盘上磁性材料粒子的两种不同的磁化状态Thesevaluesaremostcommonlyrepresentedaseithera0or1.Byte(字节)Thebyte(字节)isaunitofdigitalinformationthatmostcommonlyconsistsofeightbits(8个比特).Historically,thebytewasthenumberofbitsusedtoencodeasinglecharacteroftextinacomputer,
andforthisreasonitisthesmallestaddressableunitofmemoryinmanycomputerarchitectures.1byte=8bits.
28=256.Permitsvalue0through255Byte(字节)8位byte的概念可追溯至1956年的IBMStretchASCIIASCII(/ˈæski/ASS-kee)AmericanStandardCodeforInformationInterchangeASCII第一次以规范标准的类型发表是在1967年,最后一次更新是在1986年,共定义了128个字符(编号从0至127)其中33个字符无法显示(一些终端提供了扩展,使得这些字符可显示为诸如笑脸、扑克牌花式等8-bit符号)。且这33个字符多数都已是陈废的控制字符1968年版ASCII编码表ASCIIASCIIASCII的局限在于只能显示26个基本英文字母、阿拉伯数字和英式标点符号,因此只能用于显示现代美国英语(而且在处理英语当中的外来词如naïve、café、élite等时,所有重音符号都不得不去掉,即使这样做会违反拼写规则)ASCII只用到了0至127的编码,而一个字节(1byte)含8个比特(8bits),28=256,可以有256个编码,即0至255有人开始使用128至255编码重音符号等,这就产生了ExtendedASCIIExtendedASCII(EASCII)1970年代,对128至255的利用,不同的公司(机器)有不同的标准,致使文件交换困难EASCII(ExtendedASCII,扩展的美国标准信息交换码)是将ASCII码由7位扩充为8位而成EASCII的内码是由0到255共有256个字符组成EASCII码比ASCII码扩充出来的符号包括表格符号、计算符号、希腊字母和特殊的拉丁符号EASCIIEASCII利用了128(二进制:10000000)至255(二进制:11111111)EASCII然而,256个字符并不够用Forexample,youcan’tfitboththeaccentedcharactersusedinWesternEuropeandtheCyrillicalphabet(西里尔字符)usedforRussianintothe128–255rangebecausetherearemorethan128suchcharacters.EASCII虽然解决了部分西欧语言的显示问题,但对更多的其他语言显然无能为力Unicode出现了UnicodeUnicode是计算机科学领域里的一项业界标准由非营利机构TheUnicodeConsortium维护:/Unicode对世界上大部分的文字系统进行了整理、编码,使得电脑可以用更为简单的方式来呈现和处理各种语言的文字早期的Unicode曾使用2
bytes,也就是16bits编码字符,这样可以有
216
=65536个不同的编码,目标是囊括所有人类语言的所有文字后来发现65536个编码不够用。当今的Unicode范围为:0–1,114,111(0x10ffff)Unicode的基本概念A
character
isthesmallestpossiblecomponentofatext.‘A’,‘B’,‘C’,etc.,arealldifferentcharacters.Soare‘È’and‘Í’.TheUnicodestandarddescribeshowcharactersarerepresentedby
codepoints.Acodepointisanintegervalue,usuallydenotedinbase16.Inthestandard,acodepointiswrittenusingthenotationU+12CAtomeanthecharacterwithvalue0x12ca(4810indecimal).Unicode的基本概念TheUnicodestandardcontainsalotoftableslistingcharactersandtheircorrespondingcodepointsUnicode的基本概念Acharacterisrepresentedonascreenoronpaperbyasetofgraphicalelementsthat’scalledaglyph(字型)MostPythoncodedoesn’tneedtoworryaboutglyphs;figuringoutthecorrectglyphtodisplayisgenerallythejobofaGUItoolkitoraterminal’sfontrendererEncoding(编码)AUnicodestringisasequenceofcodepoints,whicharenumbersfrom0to0x10ffff(十进制:1,114,111)Thissequenceneedstoberepresentedasasetofbytes(meaning,valuesfrom0–255)inmemory.TherulesfortranslatingaUnicodestringintoasequenceofbytesarecalledan
encoding.Encoding(编码)/unicode-converter一种简易的编码方式Thefirstencodingyoumightthinkofisanarrayof32-bit
integers.(2^32=4,294,967,296,whereastherangeofUnicodecodepointsisupto1,114,111)Inthisrepresentation,thestring“Python”wouldlooklikethis:一种简易的编码方式用32-bitinteger编码,有缺点:It’snotportable;differentprocessorsorderthebytesdifferently.It’sverywastefulofspace.Inmosttexts,themajorityofthecodepointsarelessthan127,orlessthan255,soalotofspaceisoccupiedbyzerobytes.It’snotcompatiblewithexistingCfunctionssuchasstrlen(),soanewfamilyofwidestringfunctionswouldneedtobeused.ManyInternetstandardsaredefinedintermsoftextualdata,andcan’thandlecontentwithembeddedzerobytes.解决方案思想:不要用固定长度的32-bitinteger(4bytes)。对常用的字符,给其一个小的编号(1byte),以节省空间;对不常用的字符,给其一个大编号一定要兼容已有的编码标准(ASCII)UTF-8isoneofthemostcommonlyusedencodings.UTFstandsfor“UnicodeTransformationFormat”,andthe“8”meansthat8-bitnumbersareusedintheencoding.UTF-8UTF-8usesthefollowingrules:Ifthecodepointis<128,it’srepresentedbythecorrespondingbytevalue.Ifthecodepointisbetween128and0x7ff(十进制:2047),it’sturnedintotwobytevaluesbetween128and255.Codepoints>0x7ffareturnedintothree-orfour-bytesequences,whereeachbyteofthesequenceisbetween128and255.UTF-8UTF-8hasseveralconvenientproperties:ItcanhandleanyUnicodecodepoint.AUnicodestringisturnedintoastringofbytescontainingnoembeddedzerobytes.Thisavoidsbyte-orderingissues,andmeansUTF-8stringscanbeprocessedbyCfunctionssuchasstrcpy()andsentthroughprotocolsthatcan’thandlezerobytes.AstringofASCIItextisalsovalidUTF-8text.UTF-8isfairlycompact;themajorityofcodepointsareturnedintotwobytes,andvalueslessthan128occupyonlyasinglebyte.Unicode现状目前的Unicode字符分为17组编排,每组被称为平面(Plane),而每平面拥有65536个码位,共1,114,112个。目前只用了少数平面Unicode至今仍在不断增修,每个新版本都加入更多新的字符。目前最新的版本为目前最新的版本为2020年3月公布的13.0.0,已经收入143,859个字符超过9万个字符与汉字有关不只是文字,而是包罗万象例如:/charts/PDF/U1F300.pdf费斯托斯圆盘费斯托斯圆盘(PhaistosDisc)于1908年发现于希腊克里特岛南部的斐斯托斯,黏土质地,大约制成于公元前2000年前圆盘上有至今未能释读的古文字,用45种不同符号表示241个印记费斯托斯圆盘费斯托斯圆盘费斯托斯圆盘也有Unicode!/charts/PDF/U101D0.pdfPython字符串的常用操作字符串在Python中,字符串也属于序列类型,除了支持序列通用方法(包括分片操作)以外,还支持特有的字符串操作方法。字符串属于不可变序列类型,不可以被在原处修改字符串Python字符串驻留机制:对于短字符串,将其赋值给多个不同的对象时,内存中只有一个副本,多个对象共享该副本长字符串不遵守驻留机制转义字符(escapecharacter)转义字符(escapecharacter),或称转义序列(escapesequence):反斜杠“\”,以及在其后的一个或多个字符,合起来在最终的字符串对象中会被一个单个字符所替代转义字符让我们能够在字符串中嵌入一些不容易通过键盘输入的字符转义字符(escapecharacter)例如,这里有一个5个字符的字符串,其中嵌入了一个换行符和一个制表符:转义字符(escapecharacter)如果不是转义字符…对于一个“反斜杠+字符”的组合,如果这个组合不属于转义字符,那么就直接在最终的字符串中保留反斜杠。例如,以下的s1和s2这两个字符串的值是相等的如果不是转义字符…如果你想要一个“真正的反斜杠”字符,最好明确地表明否则,会带来不易察觉的bug。比如,为了表示Windows下的路径,只使用一个反斜杠“\”是危险的,因为你很可能引入了转义字符正确的做法是,如果希望写出明确的常量反斜杠字符,重复两个反斜杠(“\\”)或者使用raw字符串raw字符串抑制转义如果字母r(大写或小写)出现在字符串的第一个引号之前,那么它将关闭转义机制另一种办法是:因为两个反斜杠是一个反斜杠的转义,也可以通过写两个反斜杠来表示一个“真正的反斜杠”字符串格式化字符串格式化常用格式字符格式字符说明%s字符串(采用str()的显示)%r字符串(采用repr()的显示)%c单个字符%b二进制整数%d十进制整数%i十进制整数%o八进制整数%x十六进制整数%e指数(基底写为e)%E指数(基底写为E)%f、%F、%F浮点数%g指数(e)或浮点数(根据显示长度)%G指数(E)或浮点数(根据显示长度)%%字符"%""%"字符串格式化字符串格式化/2/library/string.html#format-examples字符串格式化str.format()功能强大,值得仔细研究字符串常用方法find()、rfind()、index()、rindex()、count()find()和rfind方法分别用来查找一个字符串在另一个字符串指定范围(默认是整个字符串)中首次和最后一次出现的位置,如果不存在则返回-1;index()和rindex()方法用来返回一个字符串在另一个字符串指定范围中首次和最后一次出现的位置,如果不存在则抛出异常;count()方法用来返回一个字符串在另一个字符串中出现的次数。字符串常用方法>>>s="apple,peach,banana,peach,pear">>>s.find("peach")6>>>s.find("peach",7)19>>>s.find("peach",7,20)-1>>>s.rfind('p')25>>>s.index('p')1>>>s.index('pe')6>>>s.index('pear')25>>>s.index('ppp')Traceback(mostrecentcalllast):File"<pyshell#11>",line1,in<module>s.index('ppp')ValueError:substringnotfound>>>s.count('p')5>>>s.count('pp')1>>>s.count('ppp')0字符串常用方法split()、rsplit()、partition()、rpartition()split()和rsplit()方法分别用来以指定字符为分隔符,将字符串左端和右端开始将其分割成多个字符串,并返回包含分割结果的列表;partition()和rpartition()用来以指定字符串为分隔符将原字符串分割为3部分,即分隔符前的字符串、分隔符字符串、分隔符后的字符串,如果指定的分隔符不在原字符串中,则返回原字符串和两个空字符串。字符串常用方法>>>s="apple,peach,banana,pear">>>li=s.split(",")>>>li["apple","peach","banana","pear"]>>>s.partition(',')('apple',',','peach,banana,pear')>>>s.rpartition(',')('apple,peach,banana',',','pear')>>>s.rpartition('banana')('apple,peach,','banana',',pear')>>>s="2014-10-31">>>t=s.split("-")>>>print(t)['2014','10','31']>>>print(list(map(int,t)))[2014,10,31]字符串常用方法对于split()和rsplit()方法,如果不指定分隔符,则字符串中的任何空白符号(包括空格、换行符、制表符等等)都将被认为是分隔符,返回包含最终分割结果的列表。>>>s='helloworld\n\nMynameisDong'>>>s.split()['hello','world','My','name','is','Dong']>>>s='\n\nhelloworld\n\n\nMynameisDong'>>>s.split()['hello','world','My','name','is','Dong']>>>s='\n\nhello\t\tworld\n\n\nMyname\tisDong'>>>s.split()['hello','world','My','name','is','Dong']字符串常用方法split()和rsplit()方法还允许指定最大分割次数>>>s='\n\nhello\t\tworld\n\n\nMynameisDong'>>>s.split(None,1)['hello','world\n\n\nMynameisDong']>>>s.rsplit(None,1)['\n\nhello\t\tworld\n\n\nMynameis','Dong']>>>s.split(None,2)['hello','world','MynameisDong']>>>s.rsplit(None,2)['\n\nhello\t\tworld\n\n\nMyname','is','Dong']>>>s.split(None,5)['hello','world','My','name','is','Dong']>>>s.split(None,6)['hello','world','My','name','is','Dong']字符串常用方法字符串联接join()例子:>>>li=["apple","peach","banana","pear"]>>>sep=",">>>s=sep.join(li)>>>s"apple,peach,banana,pear"不推荐使用+连接字符串,优先使用join()方法字符串常用方法lower()、upper()、capitalize()、title()、swapcase()分别用来将字符串转换为小写、大写字符串、将字符串首字母变为大写、将每个单词的首字母变为大写以及大小写互换>>>s="WhatisYourName?">>>s2=s.lower()>>>s2"whatisyourname?">>>s.upper()"WHATISYOURNAME?">>>s2.capitalize()"Whatisyour,name?">>>s.title()'WhatIsYourName?'>>>s.swapcase()'wHATISyOURnAME?'字符串常用方法生成映射表函数maketrans()和按映射表关系转换字符串函数translate()>>>importstring>>>table=string.maketrans("abcdef123","uvwxyz@#$")>>>s="Pythonisagreateprogramminglanguage.Ilikeit!">>>s.translate(table)"Pythonisugryutyprogrumminglunguugy.Ilikyit!">>>s.translate(table,"gtm")#第二个参数表示要删除的字符"Pyhonisuryuyproruinlunuuy.Ilikyi!"字符串常用方法strip()、rstrip()、lstrip()分别用来删除两端、右端或左端的空格或连续的指定字符>>>s="abc">>>s2=s.strip()>>>s2"abc">>>"aaaassddf".strip("a")"ssddf">>>"aaaassddf".strip("af")"ssdd">>>"aaaassddfaaa".rstrip("a")'aaaassddf'>>>"aaaassddfaaa".lstrip("a")'ssddfaaa'字符串常用方法内置函数eval()>>>eval("3+4")7>>>a=3>>>b=5>>>eval('a+b')8>>>importmath>>>eval('help(math.sqrt)')Helponbuilt-infunctionsqrtinmodulemath:sqrt(...)sqrt(x)Returnthesquarerootofx.>>>eval('math.sqrt(3)')1.7320508075688772>>>eval('aa')Traceback(mostrecentcalllast):File"<pyshell#3>",line1,in<module>eval('aa')File"<string>",line1,in<module>NameError:name'aa'isnotdefined字符串常用方法成员判断>>>"a"in"abcde"True>>>"j"in"abcde"Falses.startswith(t)、s.endswith(t)判断字符串是否以指定字符串开始或结束>>>importos>>>[filenameforfilenameinos.listdir(r'c:\\')iffilename.endswith(('.bmp','.jpg','.gif'))]字符串常用方法center()、ljust()、rjust()返回指定宽度的新字符串,原字符串居中、左对齐或右对齐出现在新字符串中,如果指定宽度大于字符串长度,则使用指定的字符(默认为空格)进行填充>>>'Helloworld!'.center(20)'Helloworld!'>>>'Helloworld!'.center(20,'=')'====Helloworld!===='>>>'Helloworld!'.ljust(20,'=')'Helloworld!========'>>>'Helloworld!'.rjust(20,'=')'========Helloworld!'字符串常量>>>importstring>>>string.digits'0123456789'>>>string.punctuation'!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'>>>string.letters'ABCDEFGHIJKLMNOPQRSTUVWXYZabcde
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年基坑坍塌事故专项应急预案
- 3D打印技术基础考核试题(含详细答案)
- 灭火器定期充装检测规范办法
- 2026年浙江省人教版高一语文第3单元同步练习题
- 2026年浙江省会计从业资格考试会计基础高频考点习题集
- 《审计实务》-第十四章审计报告
- 广西壮族自治区钦州市第十三中学2026秋季学期高二年级开学考试政治试卷(含答案)
- 2026年银行信息科技岗位人员招聘考试试题(含答案)
- 鼻咽癌中晚期康复指南
- 烧伤特殊疗法治疗方案
- 2025年西学中培训结业考试卷带答案
- 露天矿桥吊式提升运输系统的设计思路与实际应用潜力
- 学校食堂安全汇报
- 《同他去》(教学设计)-2024-2025学年湘艺版(2024)音乐一年级上册
- 数学·第五册(五年制高职) 教案 第二十一章 极限与连续 21.1.1 基本初等函数
- 纳米流体压裂技术-洞察及研究
- 幼儿园厨房人员知识培训课件
- 新学期-启航出发-2025-2026学年初一上学期新生开学第一课主题班会
- 中华口腔医学会巴氏刷牙法
- 《农机电器设备使用维护》课件-项目一:农机电气系统基础
- 进行性血胸的诊断
评论
0/150
提交评论