buffering:缓冲区
- buffering= -1 t和b都是io.DEFAULT_BUFFER_SIZE
- buffering=0 二进制模式 关闭缓冲区,文本模式不支持
- buffering=1 文本模式行缓冲,遇到换行符才flush
- buffering>1 二进制模式表示缓冲大小。缓冲区的值可以超过 io.DEFAULT_BUFFER_SIZE,直到设定的值超出后才把缓冲区flush,文本模式,是io.DEFAULT_BUFFER_SIZE字节,flush完后把当前字符串也写入磁盘
import time
f = open('data.txt', 'w+', buffering=1, encoding="UTF-8")
buffering = 1
f.write("第一行")
f.flush()
print("等待2秒")
time.sleep(2)
f.write("\n第二行")
buffering > 1
for i in range(51):
for i in range(50):
f.write("a\n".encode())
print("等待3秒")
time.sleep(3)
f.close()
encoding:设置字符编码,仅文本模式使用
f = open("data.txt","w",encoding="gbk")
f.write("我是谁")
print(f.read())
f.close()
文本操作
读取
file.read(字符个数/字节个数) 读取文件中的数据,如果是文本模式则是字符个数,如果是二进制则是字节个数
file.readline() 读取一行
file.readlines() 读取多行以列表形式返回(带换行符)
file.read().splitlines() 读取多行以列表形式返回(不带换行符)
f = open("data.txt","r",encoding="gbk")
print(f.read(2))
f.close()
写入
file.write(字符串)
file.writelines(序列) 把序列中的字符串元素写入文件
f = open("data.txt","w")
f.write([1,2,3])
f.writelines(["A\n","B\n","c"])
f.close()
文件指针
f.seek(offset(移动多少位),whence(从哪开始移动))
有前界,没有后界
f.tell() 返回当前指针位置
whence:
0 文件指针在开头
1 当前指针 文本模式不支持
2 文件指针在结尾 文本模式不支持
f = open("data.txt","r")
print(f.read(1)) A
f.seek(0,0)
pritn(f.read(1)) B
f.close()
- f.write(string) 将 string 写入到文件中, 然后返回写入的字符数,如果要写入一些不是字符串的东西, 那么将需要先进行转换
- file.writelines(sequence)向文件写入一个序列字符串列表,如果需要换行则要自己加入每行的换行符
- file.flush() #刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件, 而不是被动的等待输出缓冲区写入.
- f.seek(offset[,whence])移动文件指针位置.offest偏移多少字节,whence从哪里开始向后seek可以越界,越界返回空字符;但是向前seek不能越界,否则抛异常
- file.tell()返回文件当前位置
with 关键字 上下文管理器
with open("data.txt","r",encoding="UTF-8") as f:
print(f.read(3))
会自动关闭文本
- 当处理一个文件对象时, 使用 with 关键字是非常好的方式。在结束后, 它会帮你正确的关闭文件。 而且写起来也比 try - finally 语句块要简短
调试 debug
第一步:打断点 程序在哪里暂停
第二部:点击Debug进行调试
F8 下一步 F9 跳到下一个断点 F7 进入到详细代码