文件的打开方式
open(path,enconding='',mode='')
打开文件的模式:
文件(保存文件格式) ---- 打开文件(指定编码格式) ----打开模式 读取utf-8编码数据,转换成 unicode(str)编码的数据
文件打开方式种类 r w a r+ w+ a+ rb wb ab rw+ wb+ ab+ 12种
1 读
# f =open(r'C:UsersAdministratorDesktop1.txt',encoding='utf-8') # ======>>> f 为文件句柄,文件操作符 # print(type(f)) # <class '_io.TextIOWrapper'> # f.read() # f.readline() # f.readlines() #------->>>> 返回一个列表 # f.close() # 都是依赖于光标位置
r 打开 需要转换编码格式 然后直接读 file=open('D:\sdas\sadsad1.txt',encoding="gbk",mode='r') path=r'C:UsersAdministratorDesktop1.txt' file=open(path,encoding='utf-8',mode='r') a=file.read() print(a) file.close()
rb 打开 内存中是 byte 可以直接打开 但是 读的时候需要 decode解码 >> 上传,下载文件 file=open('D:\sdas\sadsad1.txt',mode='rb') >>>> 二进制 bytes path=r'C:UsersAdministratorDesktop1.txt' file=open(path,'rb') a=file.read().decode('gbk') print(a) file.close()
2 写 会清空原文件---要确保源文件不存在
# f =open(r'C:UsersAdministratorDesktop1.txt','w',encoding='utf-8') # f.writelines([]) # 写入 按列表遍历写入 # 注意光标位置 # f.write('mystr') # # f.close()
-w----- -需要解码 encoding=' ' mode='' path=r'C:UsersAdministratorDesktop2.txt' file=open(path,mode='w',encoding='utf-8') file.write('adasdad') file.close()
----wb----直接打开 需要 写的时候需要制定 编码格式 path=r'C:UsersAdministratorDesktop2.txt' file=open(path,'wb') file.write('哈哈哈'.encode('utf-8')) file.close()
3 读写 r+ 不会删除原内容
# f =open(r'C:UsersAdministratorDesktop1.txt','r+',encoding='utf-8') # # f.readline() # f.write('mystr') # 如果读了 默认是在最后添加====== 如果不读 只写 默认在最前写 # # f.close()
-a-- path=r'C:UsersAdministratorDesktop3.txt' file=open(path,'a',encoding='utf-8') file.write('哈') file.close()
---ab--- path=r'C:UsersAdministratorDesktop3.txt' file=open(path,'ab') file.write('哈'.encode('utf-8')) file.close()
4 文件修改
原文件 读取内容 ----->>> 修改后 ----->>> 重新新建一个文件 接收---->>> 删除原文件 # import os # file= open(r'C:UsersAdministratorDesktop1.txt','r',encoding='utf-8') # file2=open(r'C:UsersAdministratorDesktop2.txt','w',encoding='utf-8') # # for line in file: # mylist=line.split('|') # mylist[0]=mylist[0]+'_handsomeguy' # mystr='|'.join(mylist) # # print(mystr) # file2.write(mystr) # file.seek(0) # print(file.read()) # # file.close() # file2.close() # # # os.remove(r'C:UsersAdministratorDesktop1.txt') # os.rename(r'C:UsersAdministratorDesktop2.txt',r'C:UsersAdministratorDesktop1.txt') # file2=open(r'C:UsersAdministratorDesktop2.txt','w',encoding='utf-8') # with open(r'C:UsersAdministratorDesktop1.txt','r',encoding='utf-8') as file1: # for line in file1: # mylist=line.split('|') # mylist[0]=mylist[0][0:2] # mystr='|'.join(mylist) # file2.write(mystr) # file2.close() # # import os # # os.remove(r'C:UsersAdministratorDesktop1.txt') # os.rename(r'C:UsersAdministratorDesktop2.txt',r'C:UsersAdministratorDesktop1.txt')
5 常用的文件操作函数方法
按格式读长度----file.read(2) r--->字符 rb--->字节
------seek-->>>> 后面是字节 -------指定指针位置------file.seek(2)----字节数----gbk--2个字节一个汉字 -------指定指针位置------file.seek(3)----字节数----utf-8--3个字节一个汉字
--查看当前指针位置------file.tell()----
--file.writable()------file.readable()----
--------------file.readline()- 读一行-------------------------- ---------------file.truncate()- 截取 指针位置前面的数据----------------------- --------------file.readlines()-----读取后全部保存到内存------------
-------------一般文件操作没有完成硬盘上的时候,数据不会存在---------- ---------------file.flush()----从内存强刷到硬盘------------------
readline() --------- 每行 for line in file: print(line.read()) ========>>>>> # python 2 xreadlines()
关闭文件操作 with open(r'C:UsersAdministratorDesktop3.txt',mode='rb') as file: file.read()