python基础(八)

 今日内容概要:

一、with上下文管理(重点)

二、b模式(重点)

三、+模式(了解)

四、文件操作其他方法(重点)

内容详解:

一、with上下文管理

程序运行完成后,必须要有f.close()来关闭文件
# f = open(r"文件路径", mode="rt", encoding="utf-8")
# data = f.read(内容)  # f.write(内容)
# f.close()

使用with,程序运行完成后会自动调用f1.close()回收操作系统,关闭文件
# with open('今日内容.txt',mode='rt',encoding='utf-8') as f1:
#     data = f1.read()
#     print(data)
#   表示换行,其实蕴含了

with open('今日内容.txt', mode='rt', encoding='utf-8') as f1, 
        open('a.txt', mode='rt', encoding='utf-8') as f2:
    print('文件1的内容'.center(50, '#'))
    data = f1.read()
    print(data)

    print('文件2的内容'.center(50, '#'))
    data = f2.read()
    print(data)

    # 自动调用f1.close()、f2.close()回收操作系统

二、b模式

 1、字符编码解码的知识

# user = input('>>: ')  # user="林海峰"
user = "林海峰"

# 编码操作:
# 字符串===utf-8===》bytes
res=user.encode("utf-8")#encode 编码
print(res)
print(type(res))

# 基于网络发送数据(res)

# 解码操作:
# bytes====》utf-8=====》字符串
print(res.decode("utf-8"))#decode 解码

2、bytes

with open('a.txt',mode='rb') as f:
    data=f.read()
    print(data)
    print(type(data))

3、t 模式只能用于读文本文件

with open('a.jpg',mode='rt',encoding='utf-8') as f:
    data=f.read()
    print(data)
    print(type(data))

# 图片<---------jpg-------二进制数
# 字符<---------utf-8-------二进制数

4、b模式能用于读所有的文件

with open('a.jpg',mode='rb') as f:
    data=f.read()
    print(data)#打印出b'.....
    print(type(data))#<class 'bytes'>


with open('a.jpg', mode='rb') as f:
    data = f.read()
    print(data.decode("utf-8"))#报错
print(type(data))#报错

5、 b模式,运行结果为:二进制数

       t模式是帮我们解码了     # 字符<---------utf-8-------二进制数

# with open('a.jpg', mode='rb') as src_f, 
#         open('b.jpg', mode='wb') as dst_f:
#     # data = src_f.read()
#     # dst_f.write(data)
#
#     for line in src_f: # line=文件中的2行内容
#         dst_f.write(line)


# with open('b.txt', mode='wb') as f:
#     user = "林海峰"
#     res=user.encode('utf-8')
#     f.write(res)


with open('b.txt', mode='wt', encoding="utf-8") as f:
    user = "林海峰"
    f.write(user)

三、+模式

可读可写模式,可以省略t,默认就是t模式,读写都是以字符串为单位
r+t
w+t
a+t

可读可写模式,b模式下读写都是以bytes二进制为单位
r+b
w+b
a+b
with open('b.txt',mode='r+t',encoding='utf-8') as f:
    print(f.read())
    f.write("abcdefg")


with open('b.txt',mode='w+t',encoding='utf-8') as f:
    f.write("我爱你中国")
    print(f.read())


with open('b.txt',mode='a+t',encoding='utf-8') as f:
    f.write("我爱你中国")
    print(f.read())

四、文件操作其他方法

 1、readline

with open('b.txt', mode='rt', encoding='utf-8') as f:
    line1=f.readline()#读出第一行
    line2=f.readline()#读出第二行
    line3=f.readline()
    line4=f.readline()
    print(line1,end="")#读出第一行
    print(line2,end="")#读出第二行
    print(line3,end="")
    print(line4,end="")
原始方法: 
 l = []
     for line in f:
         l.append(line)
简便方法:
     l = f.readlines()
     print(l)
2、writelines
# with open('b.txt', mode='wt', encoding='utf-8') as f:
#     f.write("1111
2222
333
")

    lines=["1111
","222
","333
"]
#原始方法:
    for line in lines:
        f.write(line)
#简单方法:
    f.writelines(lines)

    f.writelines({'k1':111,'k2':222,"k3":3333})#k1k2k3
    f.writelines({'k1':111,1:44444,'k2':222,"k3":3333}) # 报错

    f.writelines("hello")#for 循环依次取出  h e l l o
    f.write("hello")#直接写出hello

3、flush刷新

with open(r'b.txt', mode='wt', encoding='utf-8') as f:
    # print(f.name) # 获取的是文件的路径
    f.write('哈哈哈
')#操作系统IO行为,攒一波,再发送
    # f.flush()#类似于快递急件,有一个发一个
原文地址:https://www.cnblogs.com/guojieying/p/13092640.html