1.dict.fromkeys的特性
# res = {}.fromkeys(['name', 'password', 'age'], []) # 面试
# print(res) # {'name': [], 'password': []}
# res['name'].append('jason') # dict.fromkeys的特性 用此方法产生的字典所有的键都只能指定同一个value
# print(res)

res2 = {}.fromkeys(['name', 'password', 'age'], 123) # 面试
print(res2) # {'name': 123, 'password': 123}
res2['name'].append('jason') # 报错
print(res2)

2.字符编码
字符编码只针对文本文件
万国码 unicode
现在的计算机
内存都是unicode
硬盘都是utf-8

unicode的两个特点
1.用户在输入的时候,无论输什么字符都能够兼容万国字符
2.其他国家编码的数据由硬盘读到内存的时候unicode与其他各个国家的编码都有对应关系

数据由内存保存到硬盘
1.内存中的unicode格式二进制数字 >>>>编码(encode)>>>>> utf-8格式的二进制数据

硬盘中的数据由硬盘读到内存
2.硬盘中的utf-8格式的二进制数据 >>>>>解码(decode)>>>>> 内存中unicode格式的二进制数据

3.处理乱码问题
八位二进制也叫8bit(******)
8bit = 1Bytes
1024Bytes = 1KB
1024KB = 1MB
1024MB = 1GB
1024GB = 1TB
1024TB = 1PB

注意:1.pycharm终端用的是utf-8格式
2.windows终端采用的是gbk

x = '上'
res1 = x.encode('utf-8') # 将unicode编码成可以存储和传输的utf-8的二进制数据
print(res1) # b'\xe4\xb8\x8a' 内存存储数据到硬盘中的数据是unicode码,

# bytes类型 字节串类型 你就把它当成二进制数据即可
res2 = res1.decode('utf-8') # 将硬盘中的utf-8格式的二进制数据解码成unicode格式的二进制数据
print(res2) 上 # 硬盘读取到内存中是utf-8的编码格式

###### 的什么编码格式存储的,就用什么编码格式去读取

4.文件的读写
"""
文件打开的模式
r 只读模式 # rb文本 # rt二进制数
w 只写模式
a 追加写模式
操作文件单位的方式
在 r 模式中
rt 文本文件 t在使用的时候需要指定encoding参数 如果不知道默认是操作系统的默认编码
rb 二进制 ###一定不能指定encoding参数
"""
# mode参数 可以不写 不写的话默认是rt 只读的文本文件 这个t不写默认就是t
# with open(r'D:\Python项目\day07\a.txt',mode='r',encoding='utf-8') as f:
# print(f.readable()) # 是否可读
# print(f.writable()) # 是否可写
# print(f.read()) # 一次性将文件内容全部读出

# with open(r'D:\Python项目\day07\1.jpeg',mode='rb') as f:
# print(f.readable()) # 是否可读
# print(f.writable()) # 是否可写
# print(f.read()) # 一次性将文件内容全部读出


# r模式在打开文件的时候 如果文件不存在 直接报错
# 文件路径可以写相对路径 但是需要注意该文件必须与执行文件在同一层文件下
# with open(r'a.txt',mode='r',encoding='utf-8') as f:
# with open(r'a.txt','r',encoding='utf-8') as f1: mode关键字可以不写
# print(f.readable()) # 是否可读
# print(f.writable()) # 是否可写
# print(">>>1:")
# print(f.read()) # 一次性将文件内容全部读出
# print('>>>2:')
# print(f.read()) # 读完一次之后 文件的光标已经在文件末尾了,再读就没有内容了可读
# print(f.readlines()) # 返回的是一个列表 列表中的一个个元素对应的就是文件的一行行内容
# for line in f: # f可以被for循环 每for循环依次 读一行内容
# print(i) # 这个方法 就可以解决大文件一次性读取占用内存过高的问题
# print(f.readline()) # 只读取文件一行内容
# print(f.readline())
# print(f.readline())
# print(f.readline())


# w模式:w模式一定要慎用
# 1.文件不存在的情况下 自动创建该文件
# 2.当文件存在的情况下 会先清空文件内容再写入
# with open(r'xxx.txt',mode='w',encoding='utf-8') as f:
# print(f.readable()) # 是否可读
# print(f.writable()) # 是否可写
# f.write('不不不,你没有翻~\n')
# f.write('不不不,你没有翻~\n')
# f.write('不不不,你没有翻~\n')
# f.write('不不不,你没有翻~\r')
# f.write('不不不,你没有翻~')
# l = ['不sdffs,sdfs有翻~\n','不sdfsdf不,你sdfsf翻~\n','不sfad不,你没sa翻~\n']
# f.writelines(l)
# # 上下等价
# for i in l:
# f.write(i)


# a模式
# 1.当文件不存在的情况下 自动创建该文件
# 2.当文件存在的情况下,不清空文件内容, 文件的光标会移动文件的最后
# with open(r'yyy.txt',mode='a',encoding='utf-8') as f:
# print(f.readable()) # 是否可读
# print(f.writable()) # 是否可写
# f.write('我是小尾巴\n')