python r r+;w w+;a a+;以及加不加b区别
#以下内容均在正常打开文件的情况下运行
一、列表格
模式 | 可做操作 | 若文件不存在 | 是否覆盖 |
r | 只能读 | 报错 | --- |
r+ | 可读可写 | 报错 | 是 |
w | 只能写 | 创建 | 是 |
w+ | 可读可写 | 创建 | 是 |
a | 只能写 | 创建 | 否,追加 |
a+ | 可读可写 | 创建 | 否,追加 |
b | -----(二进制读取方式) | ---------(配合读写使用) | ----- |
其实这里的读写很好理解,但是对于a和a+,他们是文本追加(这里要注意覆盖并不是覆盖重复内容,而是覆盖全部内容)------也就是重写文件(回档,哈哈哈)
加不加b取决于文件的文本形式
2.1写文件加读取文件
#不追加,但是每次都会覆盖之前写的(任何字段都会覆盖,) # with open('name.txt','w',encoding='utf8')as f: # f.writelines("0001"+'\n'+'小明'+'\n'+'1701班') # with open('name.txt','r',encoding='utf8')as f: # for line in f.readlines(): # print(line,end='')
#readlines()读取多行,就是有s和没有s的区别 # with open('demo2.txt','r',encoding='utf8')as f: # for line in f.readlines(): # print(line,end='')
2.2文件的追加写入
文件读取 # with open('demo.txt','r',encoding='utf8')as f: # for line in f.readlines(): # print(line,end='') # #文件追加写入 # with open('demo.txt','a+',encoding='utf8')as f: # f.write('\n') # f.write('you are a boy!')
2.3二进制的读取(简单解释一下)
读文件 进行读文件操作时,直到读到文档结束符(EOF)才算读取到文件最后,Python会认为字节\x1A(26)转换成的字符为文档结束符(EOF),
故使用'r'进行读取二进制文件时,可能会出现文档读取不全的现象。
示例:
二进制文件中存在如下从低位向高位排列的数据:7F 32 1A 2F 3D 2C 12 2E 76
如果使用'r'进行读取,则读到第三个字节,即认为文件结束。
如果使用'rb'按照二进制位进行读取的,不会将读取的字节转换成字符,从而避免了上面的错误。