Skip to content

Latest commit

 

History

History
114 lines (89 loc) · 3.71 KB

20.文件操作.md

File metadata and controls

114 lines (89 loc) · 3.71 KB

文件操作

1.文件打开操作

# 对于文件操作就是读和写,访问文件的模式有两种,文本模式和二级制模式, buffering是指缓冲大小:-1表示默认大小4096,0表示关闭缓冲区, encoding表示编码方式,None表示默认的编码方式,errors表示编码错误被捕获,如果是errors=ignore,那么出现编码错误将会被忽略,newline表示文件换行的意思,closefd表示是否关闭文件时同时关闭文件描述符

open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True)

# 示例1
f = open(file='./hello.txt')
result = f.read()
f.close()

# open()函数的参数讲解
file: 需要打开或创建的文件名称如果不指定路径默认值当前路径
mode: 指定文件操作的模式默认是r, 
                       r:表示读
                       w:表示只写
                       x:创建且写打开一个新文件
                       a:写打开如果文件存在追加写
                       b:二进制模式
                       t:默认文本模式可以不写一般都是以文本模式打开文件
                       +:读写给只读赋予写的能力给只写赋予只读的能力

2.文件读取

f = open(file='./hello.txt')
result = f.read()
f.write('a')  # 写就会报错
f.close()

f.read(3) # 表示文件读三个字节,不给值表示直接读到EOF(最后)

3.文件写入

f = open(file='./hello.txt', mode='w')
f.write('a')
f.read() # 读就会报错
f.close()

# x是只写,文件不存在,创建文件,以只写方式打开
f = open('./test', 'x')
f.read() # 读会报错
f.write('a')
f.close()

# a只写,文件存在,追加内容,文件不存在,只写,追加内容
f = open('./test', 'a')
f.read() # 读会报错
f.write('a')
f.close()

# 注意:wxa都是只写, t模式是字符流,按照字符编码理解,b是字节流,字节操作是bytes类型
# + 无法单独使用,用来增强r,w,x,a等功能,但是在获取文件对象是依然是本身的特性

4.文件指针

mode为r的时候指针的起始点在0
mode为a的时候指针的起始点在EOF
f.tell():可以显示指针的当前位置
f.seek(offset):移动文件指针的位置offset指的是偏移的字节

# 示例
f = open('test.txt', 'r+')
print(f.tell()) # 文件的起始位置0
print(f.read()) # 读文件所有的内容
print(f.tell()) # EOF,也就是最后一个字符
print(f.seek(2)) # 偏移两个字节
print(f.read())
f.close()

f = open('test.txt', 'rb+')
print(f.tell()) # 文件的起始位置0
print(f.read()) # 读文件所有的内容
print(f.tell()) # EOF,也就是最后一个字符
print(f.seek(2)) # 偏移两个字节
print(f.read())
f.write(b'ni hao')
f.seek(2,2) # 二级制模式下,seek(offset, whence=0) 可以给whence传递1, 2 或 0, 0表示文件从头开始, 1表示从当前位置开始,2表示从文件末尾EOF开始
f.seek(1,1)
f.write(b'ni hao')

f.flush() # 将缓存刷新到文件
f.write(b'ni hao') 
f.close() # 文件句柄关闭的时候,会将缓存刷新到文件

5.文件行读取

f = open('test.txt', 'r+')
print(io.DEFAULT_BUFFER_SIZE) # 8192
print(f.readline(), '第一行')  # 读取一行
print(f.readline(), '第二行')
print(f.readlines())          # 读取所有行,且返回列表

6.open 文件上下文管理器

# 使用上下文管理器的好处在于保证文件被关闭, 打开文件操作的时候,抛异常也会关闭
with open('test.txt') as f:
    f.write('nihao')