文件补课

# 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')

 

posted @ 2018-06-08 22:15  yuyou123  阅读(298)  评论(0编辑  收藏  举报