一、文件读写操作
1、打开文件
常用:变量 = open(“文件名”,“r/w/a”,encoding=‘UTF-8’)
file_object = open(file_name, access_mode=‘r’, buffering=-1,encoding=None)
file_name:在本身的文件夹内可直接写文件名,不在自身文件夹也可以写绝对路径/相对路径
access_mode是指打开方式,不写默认“r”
2、对文件进行读/写
(一)读操作的写法(参数都为字符个数)
(1) read(参数) 按字符读取
1、功能:来直接读取文件中字符。
2、参数: 如果没有给定size参数(默认值为-1)或者size值为负,文件将被读取直至末尾,给定size最多读取给定数目个 字符(字节)。
3、返回值: 返回读取到的内容。
data = file.read(15) # 15表示一次最多显示15个字
print(data)
data = file.read(15) # 第二次读是继续读,而不是从头开始
print(data)
# 如果读取到文件结尾继续读,则返回空字串
(2)readline(参数) 按行读取
1、功能: 用来读取文件中一行。
2、参数: 如果没有给定size参数(默认值为-1)或者size值为负,表示读取一行,给定size表示最多读取制定的字符(字节)。
3、返回值: 返回读取到的内容。
# 有参数时 表示一次读取这一行的几个字符,下次读取会将这一行没读完的读完.
line = file.readline(4)
print(line) # 春眠不觉
line = file.readline()
print(line) # 晓,处处闻啼鸟
(3)readlines(参数) 读取所有行作为一个列表
1、功能: 读取文件中的每一行作为列表中的一项。
2、参数: 如果没有给定size参数(默认值为-1)或者size值为负,文件将被读取直至末尾,给定size表示读取到size字符 所在行为止。
3、返回值: 返回读取到的内容列表。
# 有参数时 读到第几行,会把这一行的全部字符都读出来.
lines = file.readlines()
print(lines)
(4)迭代法
语法: for line in f: print(line)
for line in file:
print(line)
(二)写操作的写法(需要\n才能换行)
(0)字节串类型bytes
纯英文可以字符串前加b表达
bytes1 = b"Hello" # 一个字节串常量
print(bytes1) # b"Hello"
有非英文字符串或者字符串变量,用encode()
bytes2 = "Hi,老刘".encode() # 把字符串转化成字节串
print(bytes2) # b'Hi\xef\xbc\x8c\xe8\x80\x81\xe5\x88\x98'
字节串转换为字符串
print(bytes2.decode()) # Hi,老刘
(1)write(内容)
1、功能: 把文本数据或二进制数据块的字符串写入到文件中去。
2、参数:要写入的内容。
3、返回值:写入的字符个数。
n = file.write("cxeewr\n")
print("写入%d个字符" % n) # 写入7个字符
二进制写入:
file = open("file.txt","wb")
n = file.write("lij后方gl各色jij尼加拉瓜\n".encode())
print("写入%d个字节" % n)
(2)writelines(str_list) 将字符串列表作为参数写入文件
1、功能:接受一个字符串列表作为参数,将它们写入文件。
2、参数: 要写入的内容列表。
data = [
"春眠不觉晓,处处闻啼鸟.\n",
"夜来风雨声,花落知多少."
]
file.writelines(data)
3、关闭文件
(1)file.close()
防止后面对这个文件进行误操作
(2)with操作
格式:
with 表达式(as 对象):
语句块
with语句块结束后会自动释放f 所以不再需要close。
1、定义:也叫上下文调度器,含有"_enter"与"_exit"。
2、
# 等同于 file = open("file.txt")
with open("file.txt","r+") as f:
data = f.read()
print(data)
# with语句块结束,file自动销毁
二、读写缓冲区(实时读写要记得刷新缓冲区)
buffering参数:
buffering = -1 系统自定义
buffering = 1 行缓冲 遇\n自动刷新缓冲区
buffering > 1 指定缓冲区大小 (必须以二进制方式打开)
filename = open("buffer.txt", "wb", buffering=10)
while True:
msg = input(">>")
if not msg:
break
filename.write(msg.encode())
# filename.flush() # 刷新一次缓冲区
filename.close()
三、文件偏移量
1、tell()
获取文件偏移量的方法:文件名.tell()
2、seek(offset,whence)
作用:移动文件偏移量位置。
参数含义:
(1)whence是基准位置的默认值为0,代表从文件开头算起,1代表从当前位置算起,2 代表从文件末尾算起。
(2)offset 代表相对于某个位置移动的字节数。负数表示向前移动,正数表示向后移动。
(3)必须以二进制打开才能换whence
file.seek(6,0)
data = file.read()
print(data) # b'world'
file.seek(-3,2)
data = file.read()
print(data) # b'rld'
file.seek(-5,2)
file.write(b"xx") # 从-5后开始替换 不能添加
四、os模块
1、获取文件大小
语法:os.path.getsize(file)
单位:字节
print("文件大小:",os.path.getsize("rain.txt")) # 文件大小: 1059
2、查看目录下的文件列表
语法:os.listdir(dir)
print("文件列表:",os.listdir("..")) # 文件列表: ['DAY3','DAY2','DAY1']
3、判断文件是否存在
语法:os.path.exists(file)
返回True,False
print("文件是否存在:",os.path.exists("dict"))
4、删除文件
语法:os.remove(file)
彻底删除,无法恢复
os.remove("haha.py")