一、字符编码。

  1.

  在计算机的运行中,有三大部分组成,计算机硬件,操作系统,应用程序,当使用者在使用文档编写文字时,所显示的所有字符都存储在内存中,随后再存储在硬盘里,(仅限文字),所以,当美国人发明电脑时,都是基于自己国家的文字编写的程序,所以,美国人发明了属于自己国家的字符表,也就是ASCLL码,,因为英文字母很少,加上一些特殊符号,阿拉伯数字等,ASCLL只有125位左右。一个字符码也就8bit。下面是数据的换算。

  8bit=1Bytes

  1024Bytes=1KB

  1024KB=1MB

  1024MB=1GB

  1024GB=1TB

  1024TB=1PB

  然而,美国人发明的电脑只能输入英文,中国的字是显示不出来的,于是,中国人需要自己写一个表让电脑看懂中国,于是GBK出现了,GBK最多有2**16=65535个字符,每一个字符站2B。

  既然中国人可以,那日本人,韩国人等都可以有,于是所有的国家根据自己的语言,编写了属于自己国家的字符码。

  当每个国家都想着有能识别自己国家的码时,万国码出现了(unicode),万国码几乎容纳了所有语言的编译与翻译,它同一使用2个Byte表示。

  至此为止,所有的表,在内存与硬盘中所都是一样的,然而万国码对cpu有这巨大的负担,原本1B的字符现在需要2B才能被存储,使用起来也相当麻烦。

  所有,人们想出了一个方法,在内存中使用unicode,而再存储的时候使用另一个编码——utf-8,unicode向utf-8转换时,会将英文字符变成一个B,而将中文字符变成3个B。

  总结。

  unicode两个特点.

  1。兼容万国字符

  2。与每一个国家的编码都有对应关系,

  从内存中的unicode二进制数据到硬盘中的utf-8的二进制数据称为编码(encode)

  从硬盘中的utf-8二进制数据到内存中unicode二进制数据被称为解码(decode)

  保证不乱码的核心点是:文本文件以什么类型的编码,就用什么类型的解码(*************)

  2.python2与python3的区别

  在python2 的编写是,unicode还没有盛行,所有python都已ASCLL进行编码,

  而在python3中,都使用utf-8进行编码。

  3.头文件定义字符的保存格式

  在文件的开头,可以使用以下代码定义文件的保存格式

#coding:代码格式

  因为所有编码格式都支持英文字符,所以无论什么表都可以识别该代码。

  在python3中字符串默认是unicode,而在pycharm软件中,字符串默认为utf-8类型,在window终端编写程序时,使用的时GBK进行编码。

  在python3的终端中,字符串经过编码后所表现的时bytes类型的数据.

  在python2中定义中文字符串时,都会在前面添加‘u,吧字符串格式转换成Unicode’。

  (**********)

x="上"
print(x.encode('utf-8'))
#将字符串转换成utf-8的二进制类型
print(res.decode('utf-8'))
#将硬盘中的utf-8二进制数解码成unicode格式的二进制。

 二。文件

  1.什么是文件

  操作系统是提供给用户操作复杂硬件的简易接口。

  2.为什么要操作文件

  人或者应用程序需要永久保存数据。

  3.如何操作文件

  通过python代码操作文件。

  在python中,可以通过open来定义一个变量f,,后对文件进行操作,语法如下:

f=open('D:\Python项目\day07\a.txt',encoding='utf-8')

  其打印f后的结果是

<_io.TextIOWrapper name='D:\\python日常学习资料\\7_5day07\\代码\\day07\\a.txt' mode='r' encoding='utf-8'>

  可以看到是一个接口,所以f所获得的是对计算机硬件接口的操作。

  在定义文件名时,很容易出现\t这种转义字符很容易出现文件读取错误,所以,在输入文件地址时通常会在字符前加r,意思就是取消转译。

f = open(r'D:\python日常学习资料\7_5day07\代码\day07\a.txt',encoding='utf-8')

  然而,window系统的默认读取文件的方式是gbk,在读取utf-8模式的字符串时,会报错,所以可以使用encoding参数指定文件读取的方式。

  文件使用结束后可以使用f.close(),函数,将文件操作关闭,但是在使用这种方法关闭后,后续如果再想对文件进行操作,会报错误,即io口操作错误,所以python有一个方便简洁的造作文件的方法,语法如下

with open(r'D:\python日常学习资料\7_5day07\代码\day07\a.txt',encoding='utf-8') as f ,\
open(r'D:\python日常学习资料\7_5day07\代码\day07\b.txt',encoding='utf-8') as f1: # f仅仅是一个变量名 你把它看成是一个遥控器
print(f)
print(f1)

  也可以通过这种方法将多个文件介入操作。

  4.文件的处理模式

  文件有三种对文件的操作模式:

  r,只读模式

  w,只写模式

  a,追加模式

  文件有两种对文件单位的方式

  t,文本文件 以文本文件的形式操作文件

  b,二进制  以二进制的方式操作文件,注意再这个模式下encoding不可以指定参数。

  【r】其中mode指定的就是文件处理的模式R,W,A等,如果不指定,默认使用r只读模式,他,b不指定,默认指定t。

with open(r'D:\python日常学习资料\7_5day07\代码\day07\a.txt',mode='rt',encoding='utf-8') as f:
print(f.readable()) # 是否可读
print(f.writable()) # 是否可写
print(f.read()) # 一次性将文件内容全部读出

  readable()输出的是文件是否可读,writable输出的是文件是否可写。read()可以将文件一次性读出,这种方式在读大型文件时,非常损耗进程,所以可以采用如下方式操作文件

print(f.readlines()) 

  这中方式可以一行一行的读出文件,非常适合文件的操作。

  【w】

  只写模式切记要慎用,因为它在写文件时会将原来文件全部删除,再添加新的内容。

with open(r'xxx.txt',mode='w',encoding='utf-8') as f:
print(f.readable()) # 是否可读
print(f.writable()) # 是否可写
f.write('不不不,你没有翻~\n')

  当文件xxx不存在时,会再该文件夹添加一个名为xxx的文件。

  只写模式也有多行操作,其使用列表进行操作,将列表的每个元素作为一行进行写入。使用writelines()

with open(r'xxx.txt',mode='w',encoding='utf-8') as f:
l = ['不sdffs,sdfs有翻~\n','不sdfsdf不,你sdfsf翻~\n','不sfad不,你没sa翻~\n']
f.writelines(l)

  【a】只追加模式

  在a模式中,可以在文件末尾添加内容,如果文件夹没有该文件,则会添加该文件后追加内容。

with open(r'yyy.txt',mode='a',encoding='utf-8') as f:
print(f.readable()) # 是否可读
print(f.writable()) # 是否可写
f.write('我是小尾巴\n')

  当有该文件时,会将光标移到文件末尾。不清空原来的文件内容。

  【t】对文本文件的操作

  在t模式下,操作出的数据是字符串。

with open('text1','rt',encoding='utf-8') as f:
print(type(f.read(3)))
#输出结果>>><class 'str'>

  需要对其进行字符串类型定义,一般使用utf-8,在写入数据时也需要使用文本类型。

with open('text1','wt',encoding='utf-8') as f:
f.write('我我我我我我')
#输出结果>>>我我我我我我

  【b】二进制模式

  在这个模式下,encoding的值不需要被定义,而且读取文件时是以二进制的类型进行操作

with open('text1','rb') as f:
print(f.read())
print(type(f.read()))
#输出结果>>>b'\xe6\x88\x91\xe6\x88\x91\xe6\x88\x91\xe6\x88\x91\xe6\x88\x91\xe6\x88\x91'
#<class 'bytes'>

  在写入数据时也是按照二进制写如,如果写入字符串类型会报错。

with open('text1','wb') as f:
f.write('我我我')
#输出结果>>>报错

  所以,这里可以通过两种方法进行转换,1,使用encode()函数进行编码,将输入内容 编成二进制

with open('text1','wb') as f:
f.write('我我我'.encode())
#输出结果>>>我我我

  2,使用bytes直接将字符串编码

with open('text1','wb') as f:
res='我我我'
f.write(bytes(res,encoding='utf-8'))
#输出结果>>>我我我

  在读取文件时也可以通过解码和转换字符串的方式

with open('text1','rb') as f:
res=f.readline()
print(str(res,encoding='utf-8'))
res2=f.readline()
print((res2.decode('utf-8')))
#输出结果>>>我我我wwwada
#
#你你你

  

# coding:gbk

day7_7.5 字符表与文件操作的更多相关文章

  1. Python 字符编码及其文件操作

    本章节内容导航: 1.字符编码:人识别的语言与机器机器识别的语言转化的媒介. 2.字符与字节:字符占多少个字节,字符串转化 3.文件操作:操作硬盘中的一块区域:读写操作 注:浅拷贝与深拷贝 用法: d ...

  2. DAY7 字符编码和文件操作

    一.软件与python解释器打开文件的方法 1.软件打开文件读取数据的流程: 1. 打开软件 2. 往计算机发生一个打开文件的指令,来打开文件 3. 读取数据渲染给用户(存取编码不一致:乱码) 2.p ...

  3. Day 07 字符编码,文件操作

    今日内容 1.字符编码:人识别的语言与机器识别的语言转换的媒介 2.字符与字节:字符占多少字节,字符串转换 3.文件操作:操作硬盘的一块区域 字符编码 重点:什么是字符编码 人类能识别的字符等高级标识 ...

  4. day7 七、字符编码,字符字节与文件操作

    一.字符编码 1.定义:人类能识别的是字符等高级标识符,电脑只能识别0,1组成的标识符,要完成人与机器之间的信息交流,一定需要一个媒介,进行两种标识符的转化(两种标识符的对应关系) 对应关系形成的结构 ...

  5. Python 入门基础6 --字符编码、文件操作1

    今日内容: 1.字符编码 2.字符与字节 3.文件操作 一.字符编码 了解: cpu:将数据渲染给用户 内存:临时存放数据,断电消失 硬盘:永久存放数据,断电后不消失 1.1 什么是编码? 人类能够识 ...

  6. Python基础之字符编码,文件操作流与函数

    一.字符编码 1.字符编码的发展史 阶段一:现代计算机起源于美国,最早诞生也是基于英文考虑的ASCII ASCII:一个Bytes代表一个字符(英文字符/键盘上的所有其他字符),1Bytes=8bit ...

  7. python基础——6(字符编码,文件操作)

    今日内容: 1.字符编码: 人识别的语言与机器识别的语言转化的媒介 *****     2.字符与字节: 字符占多少字节,字符串转化 ***     3.文件操作: 操作硬盘中的一块区域:读写操作  ...

  8. python学习道路(day3note)(元组,字典 ,集合,字符编码,文件操作)

    1.元组()元组跟列表一样,但是不能增删改,能查.元组又叫只读列表2个方法 一个 count 一个 index2.字典{}字典是通过key来寻找value因为这里功能比较多,所以写入了一个Code里面 ...

  9. Python-字典、集合、字符编码、文件操作整理-Day3

    1.字典 1.1.为什么有字典: 有个需求,存所有人的信息 这时候列表就不能轻易的表示完全names = ['stone','liang'] 1.2.元组: 定义符号()t = (1,2,3)tupl ...

随机推荐

  1. SpringBoot 全局异常配置

    在日常web开发中发生了异常,往往是需要通过一个统一的异常处理来保证客户端能够收到友好的提示. 一.默认异常机制 默认异常处理(SpringBoot 默认提供了两种机制,一种是针对于web浏览器访问的 ...

  2. html各种弹出框和提示框

    控制台输出 console.log() console.info() confirm() alert() promt()   提示对话框

  3. 树莓派4b+linux

    用Win32DiskImager烧录系统 先在boot根目录下新建ssh空文件夹来开启ssh功能,否则ssh是关闭的,用putty一直连不上,显示拒绝连接 1.联网: 初次 (实践证明:直接在sd卡根 ...

  4. mac使用技巧和快捷键

    mac快捷键 shift+command+delete 清除缓存 shift+command+. 查看隐藏文件 ctrl+空格 切换输入法 shift+option+F11/F12 精细调节声音 fn ...

  5. [LOJ 2134][UOJ 132][BZOJ 4200][NOI 2015]小园丁与老司机

    [LOJ 2134][UOJ 132][BZOJ 4200][NOI 2015]小园丁与老司机 题意 给定平面上的 \(n\) 个整点 \((x_i,y_i)\), 一共有两个问题. 第一个问题是从原 ...

  6. Paper | Noise2Noise: Learning Image Restoration without Clean Data

    目录 故事背景 算法原理 点估计 神经网络算法与点估计的关系 核心思想 回头品味 实验 高斯 其他生成噪声 发表在2018 ICML. 摘要 We apply basic statistical re ...

  7. 第09组 Beta版本演示

    组长博客 本组(组名)所有成员 短学号 姓名 2236 王耀鑫(组长) 2210 陈超颖 2209 陈湘怡 2228 许培荣 2204 滕佳 2205 何佳琳 2237 沈梓耀 2233 陈志荣 22 ...

  8. fastadmin表单提交后却没有关闭弹窗

    点击操作按钮弹出窗口,操作完之后提交表单,无论操作成功还是失败,窗口都不关闭,操作之后出现一个笑脸,3秒后回到弹框刚打开的样子 而我们想要的是这个效果: 在jS那里给这个按钮绑定一个事件即可实现

  9. 安利一波ubuntu18.04作为开发环境,极度舒适

    乌班图18更新也一年多了吧,除了最开始的尝鲜,最近才真正使用起来.用完的感受是完爆Windows,比起OSX也不差. 开发环境需要的东西: git shell idea chrome firefox ...

  10. SqlBulkCopy将DataTable中的数据批量插入数据库中

    #region 使用SqlBulkCopy将DataTable中的数据批量插入数据库中 /// <summary> /// 注意:DataTable中的列需要与数据库表中的列完全一致.// ...