day09-文件操作、文件打开的三种模式、文件高级应用
基本的文件操作
什么是文件
文件是操作系统为用户或应用程序提供的一个读写硬盘的虚拟单位
如何使用文件
# open(文件路径)
# f = open(文件路径)
# print(f)
# 可以在文件路径前加r,防止字符转义
read模式打开文件
# f = open(文件路径, mode = 'r')
# data = f.read()
# print(data)
'''
读取文件内容,向操作系统发起读请求,会被操作系统转成具体的硬盘操作,将内容有由硬盘读入内存
'''
write模式打开文件
# f = open(文件路径, ’w')
# f.write(str)
打开文件三步骤
1、打开文件
2、读写
3、关闭文件
绝对路径
Windows系统绝对路径从盘符(C:\、D:\)开始写一个完整的路径
相对路径
相对于当前执行文件所在的文件夹
推荐使用相对路径
文件三种打开模式
文件操作的三种基础模式
r模式为read(默认)
w模式为write
a模式为append
文件读写内容
t模式为text(默认)
b模式为bytes(二进制文件)
r模式
只读模式,只能读不能写,文件不存在时报错
f = open('file.txt', mode='rt', encoding='utf8')
data = f.read()
print(data)
'''
f.read()读取文件指针会跑到文件的末端,如果再一次读取,读取的将是空格。
由于f.read()一次性读取文件的所有内容,如果文件非常大的话,可能会造成内存爆掉,即电脑卡死。因此可以使用f.readline()/f.readlines()读取文件内容。
readline()只读一行,而每次读取一个字符
readlines()读取整个文件,每次读取一行
for i in f.read(): #循环读出一个一个字符
for line in f: #循环一行一行读出
每一行末尾默认有一个换行
'''
print(f.readalbe()) #判断文件是否可读
w模式
只能写,不能读,文件存在时清空文件再写入内容,文件不存在时创建文件后再写入内容
f = open('file.txt','wt',enconding='utf8')
print(f.readable())
f.write('slk')
f.close()
f = open('file.txt','wb')
f.write('中华人民共和国'.encode('unicode_escape')) # 编码成bytes类型
'''
f.writelines(line) #写入列表,自动拼接列表元素(必须是字符串),一行写入
'''
a模式
可以追加,文件存在时则在文件的末端写入内容,文件不存在时则创建文件后再写入内容
f = open('file.txt', mode='at', encoding='utf8')
f.write('slk')
文件打开读取二进制
b模式是通用的模式,因为所有的文件在硬盘中都是以二进制的形式存储的,需要注意的是:b模式读写文件,一定不能加上encoding参数,因为二进制无法再编码。
文件的高级应用
'''
#r+模式
r+的写入是,光标从头开始,替换字符
#w+
因为会清空文件,所以和w没有区别
#a+
默认光标在尾部
'''
三种新模式(不推荐)
#三种模式都是可写可读
#r+模式
'''
光标在文件头部,覆盖后面的字符
'''
#w+模式
'''
和w模式没有区别
'''
#a+模式
'''
默认光标在尾部
'''
#如果真的有需求,使用打开两个文件的方式
'''
import os
with open('file_r.txt', 'r', encoding = 'utf-8')as fr,\
open('file_w.txt', 'w', encoding='utf-8')as fw:
forline in fr:
fw.write()
os.remove('file_r.txt')
os.rename('file_w.txt', 'file_w.txt')
'''
光标的高级应用
#中文字符3个字节,英文字母一个字节
#都需要用b模式打开文件
'''
seek(offset, whence = 0) #offset是光标指针的字节偏移量;whence是位置,默认是在文件头,whence=1表示当前 位置,whence=2表示文件尾
tell() #返回光标当前位置,以字节为单位
truncate(size) #只能使用可写模式打开,但是不能使用w或w+,这样会清空文件;要使用r+或者a或者a+;它会截 断文件,只保留size以内的字节,当size=0时,相当于清空文件
read(n) #读取前n个字符,中文英文都是一个字符,默认读取所有
'''
浙公网安备 33010602011771号