文章目录
- 一、文件基本操作
- 1. 打开文件
- 常见编码
- 2. 读取文件
- 认识r, w, x, a打开方式
- 3. 关闭文件-用with语句打开
- 读取文件内容
- 4. 写文件
- 光标
- 光标位置
- 移动光标
- 总结
一、文件基本操作
1. 打开文件
- 打开文件(Windows上打开文件,文件编码默认是gbk,linux默认是utf-8)
注意:使用正确的打开编码方式,否则可能乱码或者报错
- open(‘文件路径’, ‘打开方式’, encoding=‘编码方式’)
fp = open('today.txt', 'r+', encoding='utf-8')
- 最后记得要关闭文件
- fp.close()
常见编码
2. 读取文件
认识r, w, x, a打开方式
- w+每次写入都会覆盖文件原来的内容
- a+会创建不存在的文件,不会覆盖文件内容 => 追加内容
3. 关闭文件-用with语句打开
- with语句会自动帮助我们关闭文件 => 当退出with语句块时
查看光标:
with open('today1.txt', 'r+')as fp1:
# 光标位置
print("当前位置", fp1.tell())
fp1.readlines()
print("当前位置", fp1.tell())
fp1.write("你好呀")
print("当前位置", fp1.tell())
# 移动光标(从开头位置向右移10)
fp1.seek(10,0)
print("当前位置", fp1.tell())
当前位置 0
当前位置 194
当前位置 200
当前位置 10
读取文件内容
- f.seek*(cookie, whence), cookie 是偏移量,whence是相对位置
- whence:0是开始位置;1是当前位置;2是末尾位置
- 1,2位置只能用b模式打开才可以
- f.readlines => 读取文件所有内容,返回的是列表
- f.read()和f.readline()返回的都是字符串
准备一个example.txt文件,里面随便写入写内容(如一首歌词)
with open("example.txt", "w+", encoding='utf-8') as fp:
fp.write("窗外的麻雀在电线杆上多嘴\n"
"#你说这一句很有夏天的感觉\n"
"手中的铅笔在纸上来来回回\n"
"我用几行字形容你是我的谁\n"
"#秋刀鱼的滋味猫跟你都想了解\n"
"初恋的香味就这样被我们寻回\n"
"#那温暖的阳光像刚摘的新鲜草莓")
读取文件内容前5行及读取全文:
with open("example.txt", "r+", encoding='utf-8') as fp:
# 读取前五行
for line in range(5):
print(fp.readline().strip("\n"))
# 读取全文
print("===========")
fp.seek(0, 0)
print(fp.read().strip("\n"))
读取最后10字节 => 使用b模式打开:
with open('example.txt', 'rb')as fp2:
fp2.seek(-10, 2)
print("读取最后10字节")
print(fp2.read())
读取最后12个字节 => str格式
with open('example.txt', 'rb')as fp2:
fp2.seek(-12, 2)
print("读取最后12字节")
print(fp2.read().decode("utf-8"))
读取文件,显示除了以井号(#)开头的行以外的所有行
with open("example.txt", "r+", encoding='utf-8') as fp:
t = fp.readlines()
fp.seek(0)
length = len(t)
for i in range(0, length):
line = fp.readline()
if line[0] == "#":
continue
else:
print(line.strip("\n"))
4. 写文件
- f.write(‘something’)
- 为什么不是实时写入磁盘
硬盘是慢设备,频率读写会增大磁盘压力,产生瓶颈
思考:什么时候会写入磁盘?即怎么触发写入磁盘
- f.flush()
- f.close()
- buffer设置(默认:io.DEFAULT_BUFFER_SIZE)
- 0 => 实时写入(binary mode)
- 只限二进制文件
- 1 => 行缓存 (text mode) => \n
- 行缓存中遇到\n会自动触发写入
- 其他数字n => 缓冲区大小n:2*4096 ,满了之后就挤进磁盘了
光标
- 当写文件时,注意当前光标的位置(a模式除外)
光标位置
- f.tell()
移动光标
- f.seek(移动数字,开始位置)
开始位置为0 => 光标在文件内容开头位置,移动数字只能大于等于0
开始位置为1 => 光标在当前位置
开始位置为2 => 光标在文件内容末尾位置
总结
了解文件的基本操作,本文主要介绍了python里文件的打开、读取、写。