文件是数据库之外可以使数据持久化的另一种数据存储方式,因I/O操作在现代编程中使用广泛
语法格式
file object = open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True)
file
:文件路径
mode
:操作方式,默认为只读
buffering
:设置缓冲策略
encoding
:编码方式
errors
:错误处理
newline
:换行处理
closefd
:底层描述符是否持续打开
常用的属性有file
(必须)、mode
(重要)、buffering
(可选)、encoding
(可选)
mode的取值有:
取值 | 描述 | 文件不存在 | 光标位置 | 对原文件影响 |
---|---|---|---|---|
r | 只读 | 报错 | 文件开头 | 无影响 |
r+ | 读写 | 报错 | 文件开头 | 从起始位置新内容替换旧内容 |
w | 只写 | 创建 | 文件开头 | 清空原文件内容,重新写入 |
w+ | 读写 | 创建 | 文件开头 | 清空原文件内容,重新写入 |
a | 追加,只写 | 创建 | 文件末尾 | 从末尾添加内容 |
a+ | 追加,读写 | 创建 | 文件末尾 | 从末尾添加内容 |
rb | 二进制,只写 | 报错 | 文件开头 | 无影响 |
rb+ | 二进制,读写 | 报错 | 文件开头 | 从起始位置新内容替换旧内容 |
wb | 二进制,只写 | 创建 | 文件开头 | 清空原文件内容,重新写入 |
wb+ | 二进制,读写 | 创建 | 文件开头 | 清空原文件内容,重新写入 |
ab | 二进制,追加,只写 | 创建 | 文件末尾 | 从末尾添加内容 |
ab+ | 二进制,追加,读写 | 创建 | 文件末尾 | 从末尾添加内容 |
File对象经过open方法创建后,拥有以下几个属性:
file.closed
返回true如果文件已被关闭,否则返回false。
file.mode
返回被打开文件的访问模式。
file.name
返回文件的名称。
file.softspace
如果用print输出后,必须跟一个空格符,则返回false。否则返回true。
从文件中读取一个字符串,长度count可选。如count为指定,则读取到文件末尾。
file = open('./b.txt', mode="r", encoding='utf8')
str = file.read()
print(str)
# 输出为 123456
# b.txt 123456
注意:read()方法仅适用于打开方式为只读或读写方式,否则将提示错误io.UnsupportedOperation: not readable
从文件光标位置开始,向文件写入str内容。write()方法不会在字符串的结尾添加换行符(‘\n’)
file = open('./b.txt', mode="w", encoding='utf8')
file.write("How are you?")
file.write("I`m fine!")
# b.txt How are you?I`m fine!
注意:write()方法仅适用于打开方式为只写或读写方式,否则将提示错误io.UnsupportedOperation: not writable
清除缓冲区内容,结束File对象。执行close()方法后,再次对文件操作会抛出错误
file = open('./b.txt', mode="w", encoding='utf8')
file.close()
file.write("How are you?")
file.write("I`m fine!")
# ValueError: I/O operation on closed file.
返回文件内的光标当前位置,按字节计算,即汉字为3字节
file = open('./b.txt', mode="w", encoding='utf8')
file.write("哈哈哈")
print(file.tell())
# 9
file.close()
移动文件读取指针到指定位置
seek()方法语法为seek(offset[, whence])
offset : 开始的偏移量,也就是代表需要移动偏移的字节数
whence:可选,默认值为 0。给offset参数一个定义,表示要从哪个位置开始偏移;0代表从文件开头开始算起,1代表从当前位置开始算起,2代表从文件末尾算起。
详细可参考Python中文件操作先写后读输出为空的问题解决方案
刷新缓冲区的,即将缓冲区中的数据立刻写入文件,同时清空缓冲区,不需要是被动的等待输出缓冲区写入。
一般使用在File.close()前
类似于read()方法,readline() 从文件读取整行,包括 “\n” 字符。如果指定了一个非负数的参数,则返回指定大小的字节数,包括 “\n” 字符。
file = open('./b.txt', mode="r", encoding='utf8')
str = file.readline()
print(str)
file.flush()
file.close()
# 哈哈哈
# [此处为\n]
类似于read()方法,readlines() 从文件读取整行,包括 “\n” 字符,并返回一个列表。hint
为读取长度,默认为-1,即读取所有。
file = open('./b.txt', mode="r", encoding='utf8')
str = file.readlines()
print(str)
file.flush()
file.close()
# ['哈哈哈\n', '123456\n', '*******']
向文件写入一个序列字符串,如果需要换行则要自己加入每行的换行符。lines
为可迭代容器,一般使用列表或元组
file = open('./b.txt', mode="w", encoding='utf8')
file.writelines(("How are you?\n", "I'm fine"))
file.flush()
file.close()
# b.txt
# How are you?
# I'm fine
其他方法不常用不在赘述,详细可参考Python3 File(文件) 方法
os:python内置的文件或文件夹操作模块
具体参考Python3 OS 文件/目录方法
提示:不需要全部记住,了解有哪些方法即可,用到时可以查看资料