首页 > 代码库 > Python基础day-5[字符编码,文件处理,函数]

Python基础day-5[字符编码,文件处理,函数]

字符编码:

  为什么要有字符编码?字符编码是为了让计算机能识别我们人写的字符,因为计算机只认识高低电平,也就是二进制数"0","1".

  字符编码其实就是在完成一件,字符====>数字的翻译过程.

  ASCII:

  最早计算机是美国发明的,所以最早诞生的ASCII码也是基于英文考虑的.ASCII码:一个Bytes代表一个字符,1Bytes=bit.最早的ASCII只用到后七位.

127个数字,已经完全能代表键盘了,后来又把127号之后的空位来表示新的字母、符号,还加入了很多画表格时需要用下到的横线、竖线、交叉等形状,一直把序号编到了最后一个状态255。从128 到255这一页的字符集被称”扩展字符集“。

  GBK标准:

  等到中国使用计算机的时候,已经没有可利用的字节状态来表示汉字了,所以中国人发明了GBK标准,一个字符等于两个Bytes.GBK包括了GB2312 的所有内容,同时又增加了近20000个新的汉字(包括繁体字)和符号。 后来少数民族也要用电脑了,于是我们再扩展,又加了几千个新的少数民族的字,GBK扩成了 GB18030。这一系列汉字编码的标准叫做 “DBCS“(Double Byte Charecter Set 双字节字符集).

  UNICODE:

  由于各国都有自己的一套像中国一样的编码标准,互相之间又看不懂对方的编码.所以ISO(国际标准化组织)制定了一种新的编码”Universal Multiple-Octet Coded Character Set”,简称 UCS, 俗称 “unicode“.unicode规定必须用两个字节,也就是16位来统一表示所有的字符,对于ASCII里的那些“半角”字符,unicode包持其原编码不变,只是将其长度由原 来的8位扩展为16位,而其他文化和语言的字符则全部重新统一编码。由于”半角”英文符号只需要用到低8位,所以其高8位永远是0,因此这种方案在保存英文文本时会多浪费一倍的空间.

  UTF-8

  UTF-8,对英文字符只用1Bytes表示,对中文字符用3Bytes.

补充:

  计算机内存中使用的编码是unicode,用空间来换取时间,而硬盘或者网络传输则使用的是utf-8,来达到节省空间的目的.

  计算机在存取数据的时候,以什么格式存的就需要以什么格式来解码.例如:数据在内存中使用unicode编码来保存,当数据要刷入硬盘时,就需要把数据用utf-8的标准转换成Bytes(二进制),保存在硬盘上,读取的时候就需要用utf-8的标准转换成unicode,如果保存和读取使用的编码不同会导致乱码.

  python中的字符编码:

  当我们在写一个Python文件的时候,这时候写的东西其实就是字符串,跟Python的命令没有任何关系,Python是一种解释语言,当我们用Python解释器去运行我们写的代码时,解释器会按照代码头声明的字符编码,先去硬盘读取数据,使用声明的字符编码解码转换成unicode编码,然后在解释执行.

  python3三中,默认使用的编码是unicode编码,Python2中则需要手动指定,否则代码无法正常运行.Python2中的 str默认存的是Bytes.而不是像Python3一样默认存的是unicode.

  Python使用 encode和decode 两个参数命令来编码和解码.

文件处理:

  打开文件:
  f = open(‘a.txt‘,‘w‘,encoding=‘utf-8‘)

  #encoding 定义文件的读取方式 w表示覆盖写入打开,a是追加写入文件内容,  r是只读模式
  #rb,wb,ab 以Bytes读取文件,二进制模式 不需要指定encoding
  

  f.write(‘安居客活动卡收到类似的看了\n3213213213213213\n‘)

  #写入字符串 无自动换行 需加\n    #同read Bytes模式

 

  f = open(‘a.txt‘,encoding=‘utf-8‘)
  print(f.read()) #读取文件所有内容,并打印出来 ()内写数字,根据字符来确定光标位置
  #当以Bytes方式读取文件时,需要指定 encoding来正常显示

 

  #关闭打开的文件
  f.close()

  #立即刷入写入内容
  f.flush()

  #判断文件是否关闭
  f.closed

  #查看文件名和字符编码
  f.name,f.encoding

  #移动光标
  f.seek(0) #以文件起始作为参考,()内是字节来移动 (3,0/1/2) 0/1/2 分别代表 文件起始/当前位置/文件末尾

  #告知当前光标位置
  f.tell()

  #截断(写操作) ()也是字节来判断
  f.truncate()

函数:

  一 为何要有函数?
    不加区分地将所有功能的代码垒到一起,问题是:
    代码可读性差
    代码冗余
    代码可扩展差

  如何解决?
    函数即工具,事先准备工具的过程是定义函数,拿来就用指的就是函数调用

  结论:函数使用必须是:先定义,后调用

 

  二:函数的分类
  1.内置函数:built-in
  2.自定义函数:
    def 函数名(参数1,参数2,...):
    ‘‘‘注释‘‘‘
    函数体

  示例:

    def a(t,c,h):     #传入三个参数,定义t:打印什么,c打印多少次,h打印几行
    for i in range(h):    #for循环,循环为h的次数
    print(t*c)  #打印内容t 和次数

  定义函数分类  

    定义无参函数: 不依赖外部参数运行
    def print()
    print(‘111111‘)
    定义有参函数: 依赖外部参数运行
    def a(t,c,h):
    for i in range(h):
    print(t*c)
    定义空函数: 函数体为pass
    def <函数名>(x,y,z)
    pass

Python基础day-5[字符编码,文件处理,函数]