一. 回顾昨日内容
1. for...else...
2. join() 把列表转化成字符串
3. split() 字符串切割. 把字符串转化成列表
4. list删除问题.
在循环过程中. 进行删除的话. 索引和长度跟着变化.删除是不安全的
先把要删除的内容放在一个列表中. 然后循环这个列表. 删除旧列表
5. dict删除问题
循环的时候不可以删除dict中的内容
把要删除的内容放在列表中. 然后. 循环列表删除字典
6. 类型转换
list(tuple)
tuple(list)
0, "", [], {}, (), None, False, set()
7. set集合
1. 无序的. 2. 不重复的. 3. 内容必须是可hash的.不可变的.(int, str, bool, tuple, frozenset)
增加:add(), update(),
删除:pop(), clear()
查询:for
s1 & s2 交集
s1 | s2 并集
s1 - s2 差集
8. frozenset冻结集合. 不可变的.
9. 深浅拷贝
lst = [1,2,45]
lst1 = lst
拷贝的效果: 复制一个对象
浅拷贝: 把对象的第一层内容拷贝出来, copy() [:]
深拷贝: 把和这个对象相关的东西都拷贝一份, 占内存 deepcopy()
二. 今日主要内容
1. 文件操作.
2. r 只读模式
# f 叫文件句柄. 我们通过这个句柄去操纵这个文件.
# f = open("21天学会python", mode="r", encoding="UTF-8")
# content = f.read() # 从文件中读取到数据. 交给前面的content
# print(content)
# f.close()
# rb 读取字节
# f = open("21天学会python", mode="rb")
# content = f.read()
# print(content)
# f.close()
# print("马虎疼".encode("UTF-8"))
# 绝对路径. 从磁盘根目录寻找文件
# f = open("d:/sylar/呵呵.txt", mode="r", encoding="UTF-8")
# content = f.read() # 从文件中读取到数据. 交给前面的content
# print(content)
# f.close()
# 相对路径, 相对于你当前文件所在的位置
# 换行: \n
# print("大表哥小表弟\n")
# strip() # 可以去掉左右两端的空格和换行
# f = open("小护士模特少妇", mode="r", encoding="UTF-8" )
# content1 = f.readline().strip()
# content2 = f.readline().strip()
# content3 = f.readline().strip()
# content4 = f.readline().strip()
# print(content1)
# print(content2)
# print(content3)
# print(content4)
# f = open("小护士模特少妇", mode="r", encoding="UTF-8" )
# lst = f.readlines() # 一次性把所有的内容都去读出来.放在一个列表中
# for line in lst:
# print(line)
# f = open("小护士模特少妇", mode="r", encoding="UTF-8")
# # 文件句柄是一个可迭代对象
# for line in f: # 字节获取到每一行数据
# print(line)
# f.close()
# s = "床前明月光"
# print(s.strip())
# print("呵呵")
3. w 只写模式
# f = open("歌单", mode="w", encoding="utf-8")
# # content = f.read() # 在w模式下. 去读. 会出错
# # print(content)
# # f.write("两只老虎\n")
# # f.write("忐忑")
# # 向文件中写入内容. 这个时候会删除源文件中的内容. 写入新内容
# s = ["起风了", "凤舞九天", "冰河时代"]
# for e in s:
# f.write(e)
#
# # f.write("我们不一样")
# # f.write("有啥不一样")
#
#
# f.flush() # 刷新管道
# f.close()
f = open("歌单", mode="wb")
f.write("金毛狮王".encode("UTF-8"))
f.flush()
f.close()
4. a 追加写模式
f = open("歌单哈哈", mode="a", encoding="UTF-8")
f.write("又见炊烟")
f.flush()
f.close()
5. r+ 读写模式(重点)
# 正常用法
# f = open("歌单", mode="r+", encoding="UTF-8")
# # 读
# content = f.read()
# print(content)
#
# # 写
# f.write("成都")
# f.flush()
# f.close()
# 非正常用法
# f = open("歌单", mode="r+", encoding="UTF-8")
# # 写
# f.write("凉凉")
# # 读
# content = f.read()
# print(content)
# f.flush()
# f.close()
#
# f = open("歌单", mode="r+", encoding="UTF-8")
# content = f.read() # 光标在最后
# f.seek(0) # 重新回到起点
# c = f.read() # 光标还在最后
# print(content)
# print(c)
# f = open("歌单", mode="r+", encoding="UTF-8")
# f.seek(3) # 移动的是字节单位,在UTF-8文件中. 如果是中文移动的必须是3的倍数
# content = f.read() # 光标在最后
# print(content)
# 把"葫芦娃" 写到结尾. 然后把所有内容读取出来
# f = open("歌单", mode="r+", encoding="UTF-8")
# # 先把光标移动到结尾.
# f.seek(0, 2) # 移动到结尾
# # 写入内容
# f.write("葫芦娃")
# # 把光标移动到开头
# f.seek(0)
# # 读取内容
# content = f.read()
# print(content)
# f = open("歌单", mode="r+", encoding="UTF-8")
# f.seek(18)
# print(f.tell()) # 打印光标的位置
# print(f.read())
# f.close()
# f = open("歌单", mode="r+", encoding="UTF-8")
# f.seek(15)
# f.truncate() # 如果没有参数. 根据光标的位置. 保留光标前面的内容.后面的内容删除
# f.truncate(9) # 如果给了参数. 会把文件从头到参数之间的内容保留.其他的全部删掉
# f.flush()
# f.close()
# f = open("歌单", mode="r+", encoding="UTF-8")
# # f.read(2) # 2个字符
# # print(f.tell())
# f.seek(6)
# f.write("吼吼")
# f.close()
# 可以不关文件, 过一段时间自动给你关
# with open("歌单", mode="r+", encoding="utf-8") as f:
# content = f.read()
# print(content)
6. w+ 写读模式(不常用)
7. a+ 追加读写模式(不常用)
8. 文件的常用操作
9. 修改文件内容
# import os
# with open("糖葫芦", mode="r", encoding="UTF-8") as f1,\
# open("糖葫芦_new", mode="w", encoding="UTF-8") as f2:
# content = f1.read()
# content = content.replace("大白梨", "冰糖葫芦")
# f2.write(content)
#
# os.remove("糖葫芦")
# os.rename("糖葫芦_new", "糖葫芦")
import os
with open("糖葫芦", mode="r", encoding="UTF-8") as f1,\
open("糖葫芦_new", mode="w", encoding="UTF-8") as f2:
for line in f1:
line = line.replace("冰糖葫芦", "大白梨")
f2.write(line)
os.remove("糖葫芦")
os.rename("糖葫芦_new", "糖葫芦")