Day07 文件操作
1)昨日内容回顾
2)作业讲解
3)文件操作
open()内置函数 实际上是调用操作系统对文件操作的功能
windows:默认的编码方式gbk
linux: 默认编码方式utf-8
ios : 默认的编码方式是utf-8
接下来你对文件的任何操作,都需要借助文件句柄
f = open('1.txt',encoding='utf-8',mode=’r')
f.read()
f.close()
‘’‘
1.打开文件产生文件句柄
2.对文件句柄进行操作
3.关闭文件句柄
’‘’
常见错误:
1.路径错误。 \ 与后面的那个字符有了特殊意义
解决方式:
r'd:\1.txt' 在路劲前面加 r
'd:\\1.txt' 第一个\对第二个\进行转义
2.Unicodedecodeerror:编码问题
文件用什么方式存的就用什么方式打开,gbk存的,encoding=’gbk‘
3. encoding 只是声明了次文件需要用什么编码本 编码和解码而已
4.路劲:
绝对路径:从磁盘(根目录)目录开始,直到找到你的文件
相对路径:当前路径(当前文件夹)
常见操作:
读(r ,rb ,r+, r+b)
r:只读模式【默认模式,文件必须存在,不存在则抛出异常】
1,read() 全读出来 (字符串类型)
2,read(n)
在r模式下按照字符读取
在 rb模式下按照字节去读取
3.按行读取 readline(n) #####返回字符串
在r模式下按照字符读取
在 rb模式下按照字节去读取
4.多行读取 readlines(n)####返回一个列表,列表每个元素就是文件里的一个行
只有当n大于你第一行的数时才返回两行的元素,小于的话默认返回那一行的元素
5.for循环(效率较高)
f1 = open('F:\\1.txt','r',encoding='gbk')
for i in f:
print(line)
rb模式:(不需要encoding了)
操作的文件是非文件类的文件:图片,视频,音频等。
read() read(n) readline(n)readlines(n) for 循环
r+ 读写模式 (应该先读后写)
1.先读后写(追加) 建议
读到哪里就在后面增加
2.先写后读(容易出错)
打开文件时,光标默认在开头,写的时候会以覆盖的形式去写


若我的文件开头中文,比如‘吴佳’ 表示六个字节,而alex只有四个字节,所以把中文6个字节分割之后只占了四个字节,还有两个字节无法组成中文,便会报错。。若开头只有一个文字‘吴’或者英文就不会报错
r+b:以bytes类型操作的读写,写读模式(假设2.txt里面已经保存了图片的bytes数据)
f1 = open('2.txt','r+b')
a = f1.read()
f1.write( b'\xe4\xb8\xad\xe6\x96\x87' )
结果 ,文件最后添加了 ‘中文 ‘ 两个字
写(一个文件只能被一个文件句柄操作)
#没有文件,创建文件写入
#有文件,清空原文件内容,写入新内容
w: 必须以字符串的内容写入
wb:(不需要encoding了)
写入bytes类型的数据,如图片,视频,音频
# f1 = open('1.png','rb')
# a = f1.read()
# f2 = open('2.png','wb')
# f2.write(a)
w+ : 写读模式
f1 = open('2.txt','w+',encoding='utf-8')
f1.write('hahaha')
f1.seek(0)
a = f1.read()
w+b:以bytes类型操作的读写,写读模式
追加
#没有文件,创建文件,追加内容
#有文件,在原文件末尾追加新内容
以a,a+,a+b 打开的光标都是放在最后的
a:追加
f1 = open('2.txt','a',encoding='utf-8')
f1.write('hhahaha')
f1.close()
a+ :可读可写(读的时候要将光标调回到前面)
f1 = open('2.txt','a+',encoding='utf-8')
f1.seek(0)
print(f1.read())
f1.write('hhahaha')
f1.close()
a+b:以bytes类型 ,追加,可读可写
改:
#1.读的模式打开原文件,产生文件句柄f1,
with open('1.txt','r',encoding='utf-8') as f1:
#2.写的模式打开一个新文件,产生文件句柄f2
with open('1.txt','2',encoding='utf-8') as f1:
#3.读取原文件,将原文件内容改写成新内容,写入新文件
for line in f1:
content = line.replace('old','new')
f2.write(content)
#4.删除原文件
os.remove('文件名')
#5.将新文件重命名原文件
os.rename('old_name','new_name')
补充:
另外一种打开文件的模式
with open(’file‘,encoding = 'utf-8','r') as f1,\
open(’file1‘,encoding = 'utf-8',w')as f2:
content = fi.read()
1.自动关闭文件句柄
2.同一语句可以操作多个文件句柄
下列情况容易出错,因为有可能f1还没来得及关闭,f2就读取了
# with open('file1',encoding='utf-8') as f1:
# f1.read()
# with open('file1', encoding='utf-8',mode='w') as f2:
# f2.write('5555555')
文件的其他操作:
1. f1.seek(offset[, whence])
offset -- 开始的偏移量,也就是代表需要移动偏移的字节数
whence:可选,默认值为 0。给offset参数一个定义,表示要从哪个位置开始偏移;0代表从文件开头开始算起,1代表从当前位置开始算起,2代表从文件末尾算起
2.fileno() 方法返回一个整型的文件描述符(file descriptor FD 整型),可用于底层操作系统的 I/O 操作。
3. f1.flush 刷新缓冲区,强制保存
4. writeable readable
if f1.writable():
f1.write('hhahaha')
5. f1.tell()返回文件的当前位置,即文件指针当前位置
6.truncate([size]) 方法用于截断文件,如果指定了可选参数 size,则表示截断文件为 size 个字符。 如果没有指定 size,则从当前位置起截断;截断之后 size 后面的所有字符被删除。
不能在w模式下使用truncate
总结:
最常用的是 r,r+ 其次 rb,w,wb,a
readable() writeable() seek() flush() teel() truncate()

浙公网安备 33010602011771号