文件操作
数据持久化
数据从瞬时状态转换为持久状态
文件打开操作
open(参数1,参数2,参数3...)
- 打开文件,打开的是一个文件对象
-
参数1
:路径和文件名- 语法:
.
表示当前文件夹(可以省略不写);..
表示返回上一级 - 文件夹和文件夹之间以及文件夹和文件之间需要使用
\
间隔 - 路径有相对路径和绝对路径之分
- 相对路径:以当前所找参照物为基础,另一个文件相对于参照物的所在位置,应该使用
/
- 绝对路径:以磁盘为参照物,使用
\
例:‘D:\python\python2204\pythonProject\day07\test’
- 相对路径:以当前所找参照物为基础,另一个文件相对于参照物的所在位置,应该使用
假设目前我处于文件夹B中,如果要找到文件A(文件A位于文件夹A中) ../文件夹A/文件A open(r'./test/文件1.txt')
- 语法:
-
参数2
:文件打开的方式(读和写)t
、b
,文件展示形式,rb
、wb
、ab
、br
、bw
、ba
表示以字节形式操作文件-
t
: 文本 -
b
: 字节bytes
:b'.....'
----> 字节
r
、a
、w
、+
等, 文件编辑方式,等价于rt
、wt
、at
、tr
、tw
、ta
----->t
默认,可省略r
:只读,如果文件不存在,报错w
:只写,文件不存在,先自动创建;文件存在,先清空(如果某个文件夹不存在,不会创建文件夹)a
:只写,如果该文件已存在,文件指针将会放在文件的结尾,追加;如果该文件不存在,创建新文件进行写入。+
:可读可写,将r
、a
、w
变为可读可写的符号:r+
、a+
、w+
;Python操作文件要么读,要么写,不能同时读写
-
-
参数3
:文件打开的编码形式:utf-8
encoding = 'utf-8'
f = open(r'./test/文件1.txt', 'r', encoding = 'utf-8') f = open(r'./01 homework.py', 'r', encoding = 'utf-8') print(f) # read()从文件对象中读信息 result = f.read() print(result, type(result)) # <class 'str'> f = open(r'../../notes/Python2204.md', 'r', encoding = 'utf-8') result = f.read() print(result)
默认为文本模式,如果要以二进制模式打开,加上 b
。
所有文件在内存中以二进制形式保存的。
打开图片操作
f1 = open('./test/管理员.jpg', 'r', encoding = 'utf-8')
result = f1.read()
print(result) # UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte
f1 = open('./test/管理员.jpg', 'rb')
result = f1.read()
print(result, type(result)) # <class 'bytes'>
文本文件写操作
Python操作文件流程
- 新建xxx名字的文件
- 写入内容
- 保存关闭
写操作
f = open('./test/咏鹅.txt', 'w', encoding='utf-8')
str_1 = '\t咏 鹅\n\t骆宾王\n鹅鹅鹅,曲项向天歌。\n白毛浮绿水,红掌拨清波。'
print(str_1)
f.write(str_1)
f.write('\n咏 鹅')
f.close() # 如果不写关闭操作,会影响进程。
# f.write('1') # 关闭文件之后再操作会报错 ValueError: I/O operation on closed file. 输入输出异常
# I/O -- Input/Out
文本文件读操作
-
read()
- 一次性读所有内容,读出结果为字符串read(size)
- 从文件读取指定的字节数,如果未给定或为负则读取所有。 -
readline()
- 一次读一行,读出结果为字符串readline(size)
- 读取该行指定的字节数。 -
readlines()
- 一次读全部内容,每一行内容作为列表中的一个元素readlines(sizeint)
- 读取文件全部内容的指定的字节数并返回列表,若给定sizeint>0,返回总和大约为sizeint字节的行, 实际读取值可能比 sizeint 较大, 因为需要填充缓冲区
f = open('./test/咏鹅.txt', 'r', encoding='utf-8')
print(f.read())
print(f.readline())
print(f.readlines())
f.close()
指针:文件操作时指针默认在文件开始位置,指针会随着文件操作不断变化。
图片文件读写操作
读取图片
f1 = open('./test/管理员.jpg', 'rb')
result = f1.read()
print(result)
f1.close()
下载图片
f2 = open('./test/photo1.jpg', 'wb')
f2.write(result)
f2.close()