上周内容回顾
-
字符编码
计算机内部存储数据都是以二进制数字的形式存储,计算机基于电工作,而电信号只有高低电平两种状态,也就意味着计算机的世界里只能识别两种状态,我们人为的将高电平定义为数字1,低电平定义为数字0。 字符编码的研究仅限于文本文件。 计算机二进制 -》 设定好的对应关系 -》 人类的字符 字符编码表:规定了人类的字符与数字之间的对应关系。
-
字符编码发展史
一家独大 计算机是由美国人发明的 美国人需要计算机能够识别英文 所以发明了ASCII码(字符编码表) 记录了英文与数字的对应关系 1bytes来表示所有的英文及符号 8bit 256 # 所有的英文字母及符号加起来其实也不会超过128种可能 群雄割据 中国 中国人为了计算机能够识别中文发明了GBK码 GBK码表 记录了中文、英文与数字的对应关系 2bytes来表示中文及符号 16bit 65535 1bytes来表示所有的英文及符号 # 生僻字可能会使用更多的bytes来表示 日本 日本人为了计算机能识别日文发明了shift_JIS码 shift_JIS码表 记录了日文、英文与数字的对应关系 1bytes来表示所有的英文及符号 韩国 韩国人为了计算机能识别韩文发明了Euc_kr码 Euc_kr码表 记录了韩文、英文与数字的对应关系 1bytes来表示所有的英文及符号 天下一统 群雄割据导致数据交互不通畅(乱码) unicode万国码 兼容万国字符 所有的字符同意使用2bytes表示 不够增加更多bytes utf8 unicode transformation format 英文还是用1bytes 中文改用3bytes # 内存使用的编码表是unicode 硬盘使用的是utf8
-
字符编码实操
1.解决文件乱码的核心 文件以什么编码存的就以什么编码取 2.编码与解码(重要) 编码 将人类的字符按照指定的编码转换成计算机能够识别的数据 encode() 解码 将计算机能否识别的数据按照指定的编码转换成人类能够读懂的字符 decode() 3.python解释器默认编码 python2默认的是ASCII码 在python2中定义字符串在前面加一个字母u 文件头指定编码 # -*- conding:utf8 -*- name = u'wkj' python3默认的是utf8码
-
文件处理
我们在操作文件的时候其实操作的是硬盘 '''文件其实是操作系统暴露给我们可以简单快捷的操作硬盘的接口''' 绝对路径与相对路径 绝对路径 非常详细的路径描述 无论什么人什么位置都可以找到 相对路径 有一个参考 只有对应的人才可以找到 with open(文件路径,读写模式,编码格式) as 变量名: 子代码块 文件路径是必须的,读写模式和编码格式是可选的
今日内容概要
- 文件处理
1.with语法 2.文件打开模式 控制文件读写操作的模式 控制文件读写内容的模式 3.文件操作的方法 4.控制文件指针移动 5.文件修改的两种方式1
今日内容详情
-
文件处理
""" 1、什么是文件 文件是操作系统提供给用户或者说应用程序操作硬盘的一种功能 2、为何要用文件 读写文件就是在读写硬盘:我们对文件的读写操作都会被操作系统转换成硬盘的读写操作 应用程序-------------》文件对象、文件句柄 操作系统-------------》文件 硬件-----------------》硬盘 3、如何用文件 """ f = open(r'a.txt', mode='rt', encoding='utf-8') # print(f) # 文件对象、文件句柄 res = f.read() print(res) f.close() 在执行完子代码块后,with 会自动执行f.close() with open(r'a.txt', mode='rt', encoding='utf-8') as f,\ open('b.txt',mode='wt',encoding='utf-8') as f1: pass
-
文件的打开模式
1.控制文件读写操作的模式 r(默认的):只读 只读模式,如果文件不存在则报错,文件存在则文件指针处于文件开头 w:只写 只写模式,如果文件不存在则创建空文档,文件存在则清空,文件指针处于文件开头 在打开了文件不关的情况下,连续的write写入,新写的内容永远跟在后面 a:只追加写 追加写模式,在文件不存在时会创建空文档,文件存在会将文件指针直接移动到文件末尾 a模式,在打开了文件不关的情况下,连续的write写入,新写的内容永远跟在后面,这一点与w模式相同 不同的是,在打开了文件关闭然后重新打开的情况下,a模式永远写在后面 # r+ w+ a+ :可读可写 2.控制文件读写内容的模式 大前提: tb模式均不能单独使用,必须与r/w/a之一结合使用 1.t(默认的):文本模式 1. 读写文件都是以字符串为单位的 2. 只能针对文本文件 3. 必须指定encoding参数 2.b:二进制模式: 1.读写文件都是以bytes/二进制为单位的 2. 可以针对所有文件 3. 一定不能指定encoding参数
-
文件操作的方法
# 读操作 f.read() # 读取所有内容,执行完该操作后,文件指针会移动到文件末尾 f.readline() # 读取一行内容,光标移动到第二行首部 f.readlines() # 读取每一行内容,存放于列表中 # 写操作 f.write('1111\n222\n') # 针对文本模式的写,需要自己写换行符 f.write('1111\n222\n'.encode('utf-8')) # 针对b模式的写,需要自己写换行符 f.writelines(['333\n','444\n']) # 文件模式 f.writelines([bytes('333\n',encoding='utf-8'),'444\n'.encode('utf-8')]) #b模式 其他操作 f.readable() # 文件是否可读 f.writable() # 文件是否可读 f.closed # 文件是否关闭 f.encoding # 如果文件打开模式为b,则没有该属性 f.flush() # 立刻将文件内容从内存刷到硬盘
-
控制文件指针移动
#大前提:文件内指针的移动都是Bytes为单位的,唯一例外的是t模式下的read(n),n以字符为单位 with open('a.txt',mode='rt',encoding='utf-8') as f: data=f.read(3) # 读取3个字符 with open('a.txt',mode='rb') as f: data=f.read(3) # 读取3个Bytes # 之前文件内指针的移动都是由读/写操作而被动触发的,若想读取文件某一特定位置的数据,则则需要用f.seek方法主动控制文件内指针的移动,详细用法如下: # f.seek(指针移动的字节数,模式控制): # 模式控制: # 0: 默认的模式,该模式代表指针移动的字节数是以文件开头为参照的 # 1: 该模式代表指针移动的字节数是以当前所在的位置为参照的 # 2: 该模式代表指针移动的字节数是以文件末尾的位置为参照的 # 强调:其中0模式可以在t或者b模式使用,而1跟2模式只能在b模式下用