文件操作
计算机中的文件是指,相关记录或存放在一起的数据集合。
一、文本输入和输出
open()函数
用来创建一个文件对象并使用这个对象的read()和write()方法读写数据
file_object = open(file_path, mode)
# mode为文件的打开方式
文件的打开模式
mode | 描述 |
---|---|
“r” | 只读方式打开文件。文件的指针将会放在文件开头 |
“w” | 写入方式打开一个文件,如果文件已存在,文件的内容会被销毁 |
“a” | 追加方式打开一个文件,会在文件的末尾追加本次写入的内容 |
“rb” | 只读二进制的方式打开文件,文件指针将会放在文件的开头 |
“wb” | 只写二进制的方式打开文件,存在则覆盖,不存在则创建 |
“ab” | 追加二进制的方式打开文件,文件指针在结尾,不存在则创建 |
“r+” | 读写方式打开文件,文件指针会放在文件的开头 |
“w+” | 读写方式打开文件,文件存在则覆盖,不存在创建新文件 |
“a+” | 读追加方式打开文件,文件指针会放在文件的结尾,不存在则创建 |
“rb+” | 二进制格式打开一个文件用于读写,文件指针将会放在文件的开头 |
“wb+” | 二进制格式打开一个文件用于读写。已存在则覆盖,不存在则创建 |
“ab+” | 二进制格式打开一个文件用于追加。已存在则覆盖,不存在则创建 |
文件操作的基础模式有三种:
1、r模式为read(默认操作)
2、w模式为write
3、a模式为append
文件读写内容格式有两种:
1、t模式为text
2、b模式为bytes
需要注意的是:t、b这两种模式均不能单独使用,都需要r/w/a之一连用
二、操作文本文件
打开文件得到的文件对象包含了读写数据和关闭文件的方法
是_io.TextIOWrapper类的一个实例
实例方法 | 描述 |
---|---|
read(number: int): str | 从文件返回指定个数的字符。如果忽略参数,默认读取文件中的所有剩余内容 |
read(): str | 作为字符串返回文件的下一行 |
readlines(): list | 返回文件中剩余行的列表 |
write(s: str): None | 向文件中写入字符串 |
close(): None | 关闭文件 |
三、文本文件的基本操作
简单实例:
# 文本文件的基本操作
import os
file_path = r"D:\Python\练习\1.txt"
# 常规打开方式:
file = open(file_path, 'r',encoding='UTF-8')
# 让文件路径中的分隔符兼容操作不同的系统
# file = file_path.replace("/",os.sep)
print(file.read())
print(file.read(100)) # 读取100个字符(建议文件庞大时使用)
file.close() # 打开的文件对象必须最后关闭
打开文件关闭文件操作:
with open(file_path, "r") as file:
# 用with打开文件对象,不需要我们手动调用close方法,会自动调用
print(file.read())
另一种书写方法:
try:
file = open(file_path, "r")
print(file.read()) # 文件比较小的时候,可以直接读取整个文件的内容
finally: # 不管try的中途是否有错误,都会执行最后的finally语句
file.close() # 打开的文件对象必须最后关闭
补充:
python 读取文件时报错:
UnicodeDecodeError: ‘gbk’ codec can’t decode byte 0x80 in position 8: illegal multibyte sequence
解决方法:用python自带的open()函数打开文件时,出现了上述错误。很明显解码格式不对,只需要在open()函数参数中指定解码格式即可。
# 方法一:
file = open('/path/name','r', encoding='UTF-8')
# 方法二:
file = open('/path/name','rb')
四、补充函数readline()
readline() 是以列表的方式返回读取到的每一行内容。
具体实例:
readline()的三种常用操作方式:
# readline()
file_path = r"D:\Python\练习\1.txt"
# 常规打开方式:
file = open(file_path, 'r',encoding='UTF-8')
# 1
print(file.readline()) # 以列表的方式读取到每一行内容
# 2
# 用for循环遍历查看,每一行
for line in file: # for line in file.readlines()
print(line,end="")
# 3
line = file.readline() # 读取文件中的一行
while line:
print(line, end="")
line = file.readline()
file.close() # 打开的文件对象必须最后关闭