菜鸟学python第八天
-
补充内容:python 3 字符编码的内置方法
-
变量名.encode('编码表'):Unicode二进制——>编码encode——>其他格式的二进制
-
变量名.decode('编码表'):Unicode二进制——>解码decode——>其他格式二进制
-
-
文件的基本操作
-
什么是文件
文件是操作系统为应用程序或用户提供一种操作硬盘的虚拟单位
应用程序或用户对文件的读写操作其实都是向操作系统发送指令
-
为何要用文件
文件对应的硬盘空间,如果需要考虑永久保存数据那必须使用文件
-
怎么用文件
-
打开文件
-
open(r'D:pythonday09a.txt', mode='r', encoding=‘utf-8’)
r:raw的意思,表示原生代码,不需要进行任何转码
-
-
读 写文件
-
f.read()
-
f.write()
-
-
关闭文件
-
f.close() :向操作系统发指令,让操作系统关闭打开的文件,回收操作系统资源。
路径问题:
-
绝对路径:
-
win:C:acd.txt
-
linux:/a/b/c/d.txt
-
-
相对路径:相对当前执行文件所在文件夹
-
-
-
上下文管理
with:有自动关闭文件的机制,可以避免打开文件而忘记关闭的情况
with open(r'C:UsersliusijunDesktop密码.txt', mode='r') as f: date = f.read() print(date)
-
-
文件打开模式:rwa、bt
-
控制文件读写操作的模式
-
r(默认):只读模式,以该模式打开文件,当文件不存在时:报错,当文件存在时,文件指针在文件开头。
-
f.readable():判读文件是否可读
-
f.readline():只读一行,可以一行行读文本,当文件指针读到末尾是则读出为空(for line in f:……print(line))
with open(r'C:UsersJasonDesktoppy.txt', mode='rt') as f: for line in f: print(line)
理解:文本文件中,以换行符将内容划分为多个数据,所以for循环可以进行迭代循环。
-
f.readlines():读出文件形成列表形式
-
w:只写模式,以该模式打开文件,当文件不存在时创建一个空文档,当文件存在时清空文件内容,文件指针在文件开头。
*在打开文件不关闭的情况下,连续的写入,新写的内容总时跟在老内容之后。
-
f.writable():判断文件是否可写
-
f.write():在文件内写入内容
-
f.writelines():
f.write和f.writelines的区别:
file.write(str)的参数是一个字符串,就是你要写入文件的内容.
file.writelines(sequence)的参数是序列,比如列表,它会迭代帮你写入文件。
-
a:只追加写模式,当文件不存在时创建文件,当文件文件存在时追加内容。(以该模式打开文件,指针直接跳到文件末尾)
-
-
控制文件读写内容的模式(不能单独使用,必须与r、w、a连用)
-
t(默认):无论读写都是以字符为单位的,只能操作文本文件,必须指定encoding参数。
-
b:无论读写都是bytes为单位的,可以操作所有文件,一定不能指定encoding参数。
-
了解:
+:不能单独使用:必须与rwa连用,r+、w+、a+
-
-
文件修改的两种方式
-
方式一:
-
以读的方式打开源文件
-
将文件内容一次性读入内存,在内存完成修改
-
以写的方式打开源文件,然后将修改后的结果一次性屑放入源文件
优点:在文件修改过程中,硬盘只存在一份数据
缺点:浪费内存
with open('b.txt',mode='rt',encoding='utf-8') as f1: msg=f1.read() new_msg=msg.replace('alex','大SB') with open('b.txt',mode='wt',encoding='utf-8') as f2: f2.write(new_msg)
-
-
方式二:
-
以读的方式打开源文件,以写的方式打开一个临时文件
-
读取源文件的一行内容到内存中,将修改的结果写入临时文件,循环执行。
-
删除源文件,将临时文件重命名为原文件名。
优点:同一时间内在内存中只有文件的一行内容,更节省空间
缺点:在文件修改的过程中硬盘只存在两分数据
import os with open('b.txt',mode='rt',encoding='utf-8') as read_f, open('.b.txt.swap',mode='wt',encoding='utf-8') as write_f: for line in read_f: write_f.write(line.replace('大SB','alex')) os.remove('b.txt') os.rename('.b.txt.swap','b.txt')
-
-