day08
字符串转ASCII表的十进制
ASCII表中十进制对应的 字符
print( c + " 的ASCII 码为", ord(c))
print( a , " 对应的字符为", chr(a))
三种字符串形式
a'' 普通字符串:以字符作为输出单位
b'' 二进制字符串:以二进制字符串字符串以自己作为输出单位
r'' 愿意字符串: 所有字符串中的转义符号都能原样输出(取消转义)
文件操作的三步骤
打开文件 硬盘空间被操作系统持有 文件被应用程序持有
操作文件 .write .read
释放文件 .close
具体操作
r 读
f=open('文件路径‘ ,’r' ,encodint='utf-8') 打开文件 让文件被f持有 用 utf-8编码表 读取文件里面的字符串
f.read()一次性读完 文件里面的所有内容
f.read(10) 读取指定字符数
f.readline 一次读一行根据换行标识
f.readlines 将所有内容按照换行标识全部读取出来
f.close 将内存上的数据 释放给 硬盘存储起来
w 写
wf=open('文件路径‘ ,’w' ,encodint='utf-8') 打开文件 让文件被wf持有 用 utf-8编码表 对文件进行写入字符串操作
wf.write('asd'\n) 一次写一行
wf.flush 在写入过程中字符串是被内存存着的 文件并不能把 写入的文件显示给用户 当执行.flush 上面写入的字符串就能被
存入文件保存在硬盘 显示给用户看
wf.writelines 一次写多行 但是不需要\n标识
with open
优化整合了文件资源的打开和释放 with的缩进内可以被操作文件的对象,一旦取消缩进,资源就被释放了
with open ('文件路径‘ ,’r' ,encoding=('utf-8') as rf ,with open ('文件路径‘ ,’r' ,encoding=('utf-8') as rf1, 打开文件让 文件被rf持有 用编码表utf-8 进行读取
rf.read()
rf1.read()
取消缩进res.read() 内存中 资源被释放 文件关闭 读取不了了
with open('target.txt', 'r', encoding='utf-8') as rf1:
with open('target1.txt', 'r', encoding='utf-8') as rf2:
print(rf1.read())
print(rf2.read())
print(rf1.read()) # 可以操作
print(rf2.read()) # 不可以操作
文件操作模式
主模式 r w a x
主模式只能选取一个 规定只要操作方式
从模式 t b +
从模式也必须出现一个 上面介绍基础读写的过程中 r w 默认从模式为t 所以不显示
从模式是为主模式添加功能能
rt模式 读文件内容 必须要要有文件存在 不然报错 文件操作以字符串形式
rb模式 文件操作以字节形式
wt模式 写入内容 没有文件 新建文件 有文件清空文件内容写入 文件操作以字符串形式
wb模式 文件操作以字节形式
at模式 追加写 没有文件新建文件 写入 文件中有内容 追加内容在末尾 文件操作以字符串形式
ab模式 文件操作以字节形式
r+t模式 可读可写文件必须存在 且可以可写 以字符串形式操作 默认从开头开始替换写入
r+b模式 可读可写字节操作
w+t 可读可写文件不存在新建 文件存在清空内容 写入 字符操作
w+b 可读可写 字节操作
a+t 可读可写 文件不存在新增 文件存在文件内容后面新增字符操作
a+b 可读可写 字节操作
文件编码问题
t模式下 原文件采用什么编码 读取该文件也需要用相同的编码 如果不选默认跟操作系统保持一致
b模式下 因为原文件内从是二进制的数据 存在硬盘中 原文件内容存入硬盘已经有一个文件通过编码表转化成二进制数据类型的一个过程
我们用字符形式 来读原文件 可以直接读到原文件在硬盘中的二进制数据 我们不需要在规定一个编码
文件复制过程
with open('target.txt', 'r', encoding='utf-8') as rf:
with open('target2.txt', 'w', encoding='utf-8') as wf:
for line in rf:
wf.write(line)
with open('target3.txt', 'wb') as wf:
for line in rf:
wf.write(line)
# 非文本文件只能采用b模式操作,不需要指定编码 - 因为根本不涉及编码解码过程
with open('001.mp4', 'rb') as rf:
with open('002.mp4', 'wb') as wf:
for line in rf:
wf.write(line)
游标操作
游标操作的是字节 所以只能在b模式下进行操作
.seek(offse,whence)
offse 代表游标向右偏移的字节数 -offse 代表向左偏移
whence 0 代表游标设置问开头 1代表游标在当前位置 2 代表游标在末尾