6.18-Python-语言及其应用-笔记-像高手一样玩转数据-未完!

来源:互联网 发布:22lr子弹淘宝 编辑:程序博客网 时间:2024/05/29 09:27
  1. 文本字符串
    python 有两种内置的数据类型,
    一种是字符串,是由unicode字符组成的序列,用于存储文本数据
     一种是字节和字节数组,由8bit组成的序列,用于存储二进制数据

讨论文本字符串
最初的时候都使用Ascii 码 对字符串进行编码,Ascii 只有7位/bit ,能表示的只有[A-Z],[a-z],1~10,还有一些别的控制符号,明显不够
现在用Unicode 编码方式,最新版本的Unicode包含了110 000的字符,这些字符被划分成若干个8bit的集合

python 3中的字符串是Unicode 类型的,python 2 中还需要区分Unicode 字符串和以字节单位的字符串UnicodeID 概念,可以通过\u+四个数字的形式,例如'\u1132'd的形式找到对应的‘对应的符号’和‘大写形式的名称’,可以用UnicodeID +python 里面的函数进行找到,name()+ lookup()
def unicode_test():    import unicode    name = unicode.name(value)    value2 = unicode.lookup(name)
  1. python 字符串存储非”常用的”的字符串
    一种方式是通过复制粘贴其他网站上的特殊字符,但是这个有风险,只有这个网站的文本源是用utf-8的形式编码的,这种方式很不靠普

    第二种方式是通过索引找到对应的Unicode值,然后name()/lookup()方法找到对应的标记


编码方式
发现我之前的理解有问题,总是分不清utf-8 和unicode 的概念,前面是编码方式,后面是一种字符串类型

编码的实质:把字符串转化成一系列字节的过程,encode(‘utf-8’),表示的
第一种编码方式:utf-8编码

utf-8的动态编码方式:如果不是动态的话,需要3-4字节把对应的ID加入到内存中去,比较消耗内存,所以动态的方分配字节1-4,通常是Ascii码分配一个字节,拉丁语系分配两个字节。。。。。

>>>snow = '\u2603'#snow 是一个unicode字符串,>>>len(snow)>>> 1>>>ds = snow.encode('utf-8')>>>len(ds)>>> 3#ds变成字节序列,又因为utf-8是变长的编码方式,单个Unicode字符串占用了3个空间

解码: 把字符序列转换成Unicode过程,我们从外界文本源获得的文本都是经过编码的字符串,我们需要知道它是什么编码的,然后进行解码得到对应的Unicode字符串!

>>>place = 'caf\u00e9'>>>type(place)<class 'str'>>>>place_bytes = place.encode('utf-8')>>>b'caf\xc3\xa9'>type(place_bytes)><class 'bytes'>>>>place3 =place_bytes.decode('utf-8')>>>place4 = place_bytes.decode('latin-1')

python 格式化的方法有两种,第一种是旧式,一种是新式,
旧式格式化的方式

actor = 'Richard Gere'cat = Cheater'weight = 39>>>"my wife's most favourite actor %s and her cat name is %s it is %s pounds" %(actor,cat,weight)

使用{}和form的新式

f=42.5n=45s='strong cheese'>>>'{}{}{}'.form(n,f,s)>>>'{2}{0}{1}'.form(n,f,s),里面的参数分别代表着后面参数的顺序>

re标准库使用正则表达式进行匹配,re.compile()是先进行编译,为了加快匹配速度

import reyoupattern = re.compile('you')result = youpattern.match('you Frankenstein') 

讨论match(),search(),findall(),split(),sub()函数
match()只能用来检测开头!!!”源字符串”开头是不是和”模式源”一样,search()可以返回首次匹配成功,findall()返回所有的匹配,split()按照匹配切分,sub()表示部分替换

#例子使用match去匹配不是首字母的的m = re.match('.*Frank','Young Frank')#.*表示任意多个字符!s = re.search('Frank','Young Frank')f = re.findall('n','Young Frank')sp = re.split('n','Young Frank')m = re.sub('n','?','Young Frank')

理解一些特殊字符,除了上面,还有很多特殊的字符,配合模式匹配方法

\d \D \w \W \s \S \b \B{m},{m,n},{m,n}?,[abc],[^abc]# ^表示从匹配开头,$表示从结尾开始匹配re.findall("^I wish",'I wish i can fly,Have a dish of fish today.')re.findall("fish today.$",'I wish i can fly,Have a dish of fish today.')#添加r表示使用的是正则表达式,禁用字符串转义符号re.findall(r'\bfish',source)

???


二进制数据

阅读全文
0 0