# f1=open('a2.txt',encoding='utf-8')
# print(f1.read())
# f1.close()
'''
f1 或者文件句柄 ,f,file,file hander,f_h..
open()调用的内置函数,内置函数调用的系统内部的open,(windows、linux、mac内部的open)
一切对文件进行的操作都是基于文件句柄f1的
'''
'''
文件
操作文件
1.文件路径
2.编码方式
3,动作mode
代码
# f1 = open('D:\空姐护士老师主妇.txt', encoding='utf-8', mode='r')
# content = f1.read()
# print(content)
# f1.close()
执行流程:
1,打开文件,产生文件句柄。
2,操作文件句柄。
3.关闭文件句柄!!
报错原因:
1.编码错误:编码不一致
UnicodeDecodeError: 'gbk' codec can't decode byte 0x97 in position 109: illegal multibyte sequence
2.路径错误:\未转义
加\\ 或加r(推荐)r'F:\\Python自动化21期\\day03\\1.txt'
'''
'''
读:r rb r+ r+b
1.read()全读出来
2.r 模式 read(n) 读一部分,按字符去读取(n个中文或n个数字或符号)
rb 模式 read(n) 读一部分,按字节去读取(eg:4时,就是4个字节,但无法解码的)
3.readline按行读取
4.readlines 全读出来,将每一行作为列表的每一个元素,并返回这个列表
5.for循环----几乎不占内存,相当于循环readlines的列表,但节省空间啊--推荐
f1=open('a2.txt',encoding='utf-8')
for line in f1:
print(line)
f1.close()
r+读写,先读后写 --- 先写后读可能报错
写:w wb w+ w+b
w没有文件,新建文件写入内容
有原文件,先清空内容,在写入新内容
#wb图片的读取及写入
f1=open('1.jpg','rb')
content=f1.read()
f2=open('2.jpg','wb')
f2.write(content)
f1.close()
f2.close()
w+ 先写后读 先写入,调整光标,在全部读出
f1=open('a1.txt',encoding='utf-8',mode='w+')
f1.write('老dfhdfjggggggggggggggfdj')
f1.seek(0) #调整光标
print(f1.read())
f1.close()
追加:a ab a+ a+b
a没有文件,新建文件写入内容
有原文件,在最后追加 ----可以加\n换行
f1=open('a1.txt',encoding='utf-8',mode='a')
f1.write('\n测试')
f1.close()
a+ 追加写读
f1=open('a1.txt',encoding='utf-8',mode='a+')
f1.write('\nzzz')
f1.seek(0) #调整光标
print(f1.read())
f1.close()
'''
# f1=open('a.bak','rb')
# print(f1.read())
# f1.close()
# f1=open('a1.txt',encoding='utf-8',mode='a+')
# f1.write('\nzzz')
# f1.seek(0) #调整光标
# print(f1.read())
# f1.close()
# #wb图片的读取及写入
# f1=open('1.jpg','rb')
# content=f1.read()
#
# f2=open('2.jpg','wb')
# f2.write(content)
# f1.close()
# f2.close()
'''
其它操作方法:
read readline readlines write
flush 刷新文件内部缓冲区
readable是否可读 返回True False
writable是否可写 返回True False
tell告诉光标位置----------(按字节)
seek调整光标位置 0 seek(0,2)光标调整到最后
ftp上传下载--断点续传依赖于seek
f1=open('a1.txt',encoding='utf-8')
# print(f1.readable())
# print(f1.writable())
print(f1.read(3))
print(f1.tell())
# f1.seek(0) #光标调整到开头
f1.seek(11) #任意调整
# f1.seek(0,2) #光标调整到最后
print(f1.tell()) #告诉光标的位置
f1.close()
truncate 按照字节去截取,必须在a或a+模式 截断数据,仅保留指定之前数据
# f1=open('a1.txt',encoding='utf-8',mode='a+')
# f1.truncate(3)
# f1.close()
'''
# f1=open('a1.txt',encoding='utf-8')
# # print(f1.readable())
# # print(f1.writable())
# print(f1.read(3))
# print(f1.tell())
# # f1.seek(0) #光标调整到开头
# f1.seek(11) #任意调整
# # f1.seek(0,2) #光标调整到最后
# print(f1.tell()) #告诉光标的位置
# f1.close()
# f1=open('a1.txt',encoding='utf-8',mode='a+')
# f1.truncate(3)
# f1.close()
'''
with
1.可以同时操作多个文件
2.不用手动关闭
注意:对同一文件又读又写有时会出问题,共用一个文件句柄错误;可以读完之后,写f1.close()主动关闭
#文件的改
#1,以读模式打开原文件,产生文件句柄。
#2,以写的模式打开一个新文件,产生文件句柄。
#3,读取原文件,进行修改,将修改后的内容写入新文件。
#4,将原文件删除。
#5,新文件重命名原文件。
'''
# with open('a1.txt',encoding='utf-8') as f1,\
# open('a2.txt',encoding='utf-8',mode='w') as f2:
# print(f1.read())
# f2.write('3333')
# import os
# with open('file_test', encoding='utf-8') as f1,\
# open('file_test.bak', encoding='utf-8', mode='w') as f2:
# old_content = f1.read()
# new_content = old_content.replace('alex','SB')
# f2.write(new_content)
# os.remove('file_test')
# os.rename('file_test.bak','file_test')
# import os
# with open('file_test.py', encoding='utf-8') as f1,\
# open('file_test.bak', encoding='utf-8', mode='w') as f2:
# for line in f1: #for循环未结束一直在持续写,所以w也不覆盖;一个文件句柄可以写多次,只要未关闭之前。
# new_line = line.replace('alex','SB')
# f2.write(new_line)
# os.remove('file_test.py')
# os.rename('file_test.bak','file_test.py')
with open('a1.txt',encoding='utf-8',mode='w') as f1:
f1.write('111')
f1.write('2222221')