Python基础之文件操作

Python基础之文件操作

文件是数据库之外可以使数据持久化的另一种数据存储方式,因I/O操作在现代编程中使用广泛


1.打开文件

语法格式

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+ 二进制,追加,读写 创建 文件末尾 从末尾添加内容

2.文件属性

File对象经过open方法创建后,拥有以下几个属性:

file.closed 返回true如果文件已被关闭,否则返回false。
file.mode 返回被打开文件的访问模式。
file.name 返回文件的名称。
file.softspace 如果用print输出后,必须跟一个空格符,则返回false。否则返回true。


3.文件方法

(1) read([count])方法

从文件中读取一个字符串,长度count可选。如count为指定,则读取到文件末尾。

file = open('./b.txt', mode="r", encoding='utf8')
str = file.read()
print(str)
# 输出为 123456
# b.txt 123456

注意:read()方法仅适用于打开方式为只读或读写方式,否则将提示错误io.UnsupportedOperation: not readable

(2)write(str)方法

从文件光标位置开始,向文件写入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

(3)close()方法

清除缓冲区内容,结束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.

(4)tell()方法

返回文件内的光标当前位置,按字节计算,即汉字为3字节

file = open('./b.txt', mode="w", encoding='utf8')
file.write("哈哈哈")
print(file.tell())
# 9
file.close()

(5)seek(offset[, whence])方法

移动文件读取指针到指定位置

seek()方法语法为seek(offset[, whence])
offset : 开始的偏移量,也就是代表需要移动偏移的字节数
whence:可选,默认值为 0。给offset参数一个定义,表示要从哪个位置开始偏移;0代表从文件开头开始算起,1代表从当前位置开始算起,2代表从文件末尾算起。

详细可参考Python中文件操作先写后读输出为空的问题解决方案

(6)flush() 方法

刷新缓冲区的,即将缓冲区中的数据立刻写入文件,同时清空缓冲区,不需要是被动的等待输出缓冲区写入。
一般使用在File.close()前

(7)readline([count]) 方法

类似于read()方法,readline() 从文件读取整行,包括 “\n” 字符。如果指定了一个非负数的参数,则返回指定大小的字节数,包括 “\n” 字符。

file = open('./b.txt', mode="r", encoding='utf8')
str = file.readline()
print(str)
file.flush()
file.close()
# 哈哈哈
#       [此处为\n]

(8)readlines([hint]) 方法

类似于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', '*******']

(9)writelines(lines)

向文件写入一个序列字符串,如果需要换行则要自己加入每行的换行符。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(文件) 方法


4.OS模块

os:python内置的文件或文件夹操作模块
具体参考Python3 OS 文件/目录方法

提示:不需要全部记住,了解有哪些方法即可,用到时可以查看资料

你可能感兴趣的:(Python)