1.今日内容大纲
一. 昨日内容回顾1. join() 可以吧列表转化成字符串split() 把字符串转化成列表2. 关于删除列表在循环的时候不能进行删除. 索引会跟着你删除而改变创建新列表. 把要删除的内容放在新列表中. 循环新列表. 删除老列表字典在循环中不能删除.字典在循环的时候不能改变大小.创建列表. 把要删除的key保存在列表中. 循环列表删除字典fromkeys(keys, value) 使用keys中的元素和value组合成key:value创建新字典3. set集合特点: 无序, 不重复, 可哈希set集合本身可变的. 不可哈希. frozenset()4. 深浅拷贝1. 赋值. 没有创建新对象.2. 浅拷贝. 创建新的对象. 浅拷贝只复制一层内容3. 深拷贝. 创建新对象. 把整个对象的内部全部都进行拷贝\女神(eva_j)的博客 二. 作业讲解三. 今日主要内容对文件内部的内容进行操作1. open("文件路径", mode="模式", encoding="编码")文件的路径:1. 绝对路径:1. 从磁盘根目录寻找2. 网络上的路径2. 相对路径相对于当前你这个程序所在的文件夹.(用的最多的)模式r 读. 只读模式w 写 只能写a 追加写, 只能写入b: bytes 这个时候处理文件的是字节操作非文本文件的时候用带b的rbwbabr+ 读写模式w+ 写读模式a+ 追加读模式r+bw+ba+b光标:移动到开头: seek(0)移动到末尾: seek(0, 2)文件的修改:1. 从源文件中读取内容. 修改内容. 写入到文件副本中.2. 删除源文件. 重命名文件副本为源文件的名字with open(..) as f :明天预习:函数(非常重要, 简单)参数, 返回值
2.练习
'''
1. 判断一个数是否是水仙花数, 水仙花数是一个三位数, 三位数的每一位的三次方的和还等于这个数. 那这个数就是一个水仙花数, 例如: 153 = 1**3 + 5**3 + 3**32. 给出一个纯数字列表. 请对列表进行排序(升级题).
思路:
1. 完成a和b的数据交换. 例如, a = 10, b = 24 交换之后, a = 24, b = 10
2. 循环列表. 判断a[i]和a[i+1]之间的大小关系, 如果a[i]比a[i+1]大. 则进行互换. 循环结束的时候. 当前列表中最大的数据就会被移动到最右端.
3. 想一想, 如果再次执行一次上面的操作. 最终第二大的数据就移动到了右端. 以此类推. 如果反复的进行执行相应的操作. 那这个列表就变成了一个有序列表.3. 完成彩票36选7的功 能. 从36个数中随机的产生7个数. 最终获取到7个不重复的数据作为最终的开奖结果.
随机数:
from random import randint
randint(0, 20) # 0 - 20 的随机数4. 税务部门征收所得税. 规定如下:1). 收入在2000以下的. 免征.2). 收入在2000-4000的, 超过2000部分要征收3%的税.3). 收入在4000-6000的, 超过4000部分要征收5%的税.4). 收入在6000-10000的, 超过6000部分要征收8%的税.4). 收入在10000以上的, 超过部分征收20%的税.注, 如果一个人的收入是8000, 那么他要交2000到4000的税加上4000到6000的税加上6000到8000的税.收入 = 8000-(4000-2000)*3%-(6000-4000)*4%-(8000-6000)*8%
让用户输入它的工资, 计算最终用户拿到手是多少钱.默写:
简述什么是深浅拷贝.
删除列表中姓周的人的信息
lst = [‘周芷若’, ‘周伯通’, ‘王重阳’, ‘周葫芦娃’]'''# 1.判断一个数是否是水仙花数, 水仙花数是一个三位数,
# 三位数的每一位的三次方的和还等于这个数.
# 那这个数就是一个水仙花数,
# 例如: 153 = 1**3 + 5**3 + 3**3# num = input("请输入一个三位数:")
# if len(num) == 3:
# result = int(num[0])**3 + int(num[1])**3 + int(num[2])**3
# if int(num) == result:
# print("是一个水仙花数")
# else:
# print("不是水仙花数")
# else:
# print("亲, 你输入的不是三位数")
## 3.完成彩票36选7的功能. 从36个数中随机的产生7个数. 最终获取到7个不重复的数据作为最终的开奖结果.
# 随机数:
# from random import randint
#
# s = set()
# while len(s) < 7:
# n = randint(1, 33)
# s.add(n)
# print(s)# 税务部门征收所得税. 规定如下:
# 1). 收入在2000以下的. 免征.
# 2). 收入在2000-4000的, 超过2000部分要征收3%的税.
# 3). 收入在4000-6000的, 超过4000部分要征收5%的税.
# 4). 收入在6000-10000的, 超过6000部分要征收8%的税.
# 4). 收入在10000以上的, 超过部分征收20%的税.
# 注, 如果一个人的收入是8000, 那么他要交2000到4000的税加上4000到6000的税加上6000到8000的税.
# 收入 = 8000-(4000-2000)*3%-(6000-4000)*4%-(8000-6000)*8%
# 让用户输入它的工资, 计算最终用户拿到手是多少钱.# salary = int(input("请输入你的工资:"))
# if salary <= 2000:
# print("你不用交税")
# print("你的实际收入是%s" % salary)
# elif salary <= 4000:
# tax = (salary - 2000)*0.03
# print("你要交%s税 " % tax)
# print("你的实际收入是:%s" % (salary-tax))
# elif salary <= 6000:
# tax = 2000* 0.03 + (salary-4000) * 0.05
# print("你要交%s税 " % tax)
# print("你的实际收入是:%s" % (salary - tax))
# elif salary <= 10000:
# tax = 2000* 0.03 + 2000*0.05 +(salary - 6000) * 0.08
# print("你要交%s税 " % tax)
# print("你的实际收入是:%s" % (salary - tax))
# else:
# tax = 2000 * 0.03 + 2000 * 0.05 + 4000 * 0.08 + (salary-10000) * 0.20
# print("你要交%s税 " % tax)
# print("你的实际收入是:%s" % (salary - tax))
#
## a = 10
# b = 20
# c = a
# a = b
# b = c
# print(a, b)# a = 10
# b = 20
# a, b = b, a
# print(a, b)# 大学课程中的数据结构-严蔚敏.
# 冒泡排序(使用两两相邻的数进行比较.) 快排, 插入排序, 归并排序, 堆排序, 希尔排序
# 0 1 2 3 4 5 6
lst = [175, 160, 185, 134, 196, 128, 155, 170, 185, 189, 236]
for j in range(len(lst)):# 第i个和第i+1个比较for i in range(len(lst)-1): # 自己优化if lst[i] > lst[i+1]:lst[i], lst[i+1] = lst[i+1], lst[i]
print(lst)
3.基本文件操作
# f = open("d:/小护士模特少妇女网红.txt", mode="r", encoding="UTF-8")
# # content = f.read() # 读取内容, 读取3个字符
# line1 = f.readline().strip() # 空白: 空格, \t, \n
# line2 = f.readline().strip()
# print(line1)
# print(line2)# content = f.read() # 一次全都读取出来. 缺点: 1. 读取大的文件的时候. 内存容易溢出 2. 操作比较麻烦# content = f.readlines() # 也是全都加载进来了.
# print(content)# f是一个可迭代对象
f = open("d:/周润发大战奥特曼.txt", mode="r", encoding="utf-8") # 默认跟着操作系统走的 GBK
# for line in f: # 内部其实调用的是readline()
# print(line)
# f.close() # 关闭# 打印的末尾是换行
# print("哈哈")
# print("呵呵")
4.write()
f = open("d:/sylar.txt", mode="w", encoding="utf-8")
f.write("周笔畅\n") # 写的时候. 先清空. 再写入. w
f.write("胡辣汤\n")
f.write("实付款\n")f.flush()
f.close()
5.append()
f = open("d:/sylar.txt", mode="a", encoding="utf-8")
f.write("娃哈哈") # 追加写
f.write("爽歪歪")
f.flush()
f.close()
6.文件拷贝
f1 = open("d:/linux学院-桌面背景.jpg", mode="rb")
f2 = open("E:/刘伟自拍.jpg", mode="wb")
for line in f1:f2.write(line)
f1.close()
f2.flush()
f2.close()
7.读写模式
f = open("菜单", mode="r+", encoding="utf-8") # r+最常见
s = f.read(1) # 读取一个字符
print(s)
f.write("胡辣汤") # r+模式. 如果你执行读了操作. 那么写操作的时候. 都是写在文件的末尾. 和光标没有关系
# f.write("ab") # 在文件开头写入. 写入的是字节,把原来的内容盖上# for line in f:
# print(line)
# f.write("蛋炒饭")
# 正确用法: 先读后写
f.close()
8.写读模式
f = open("菜单", mode="w+", encoding="utf-8") # 很少用.
f.write("疙瘩汤")
f.seek(0) # 移动到开头
content = f.read()
print("读取的内容是", content)
f.flush()
f.close()
9.追加模式
f = open("菜单", mode="a+", encoding="utf-8")
f.write("韭菜鸡蛋饺子")f.seek(0)
content = f.read()
print(content)
10.光标
f = open("菜单", mode="a+", encoding="utf-8") # r+ a+ w+# f.write("我要多写一点内容. 然后争取能看到效果")
# f.seek(0)
# print(f.read())
# f.seek(0)
# f.write("你")
#
# f.seek(0)
# print(f.read(1))
# f.seek(0)
# f.write("大米饭")
# f.write("大米粥")
# print(f.tell())
# f.seek(3) # 字节
# print(f.read(1))
# # print(f.read(1)) # 字符
# # print(f.read(1)) # 字符
# print(f.tell()) #字节
# 使用tell()可以知道光标在哪里
# seek()可以移动光标
# 读写的时候. 单位 字符
# 光标: 单位是字节
# 光标移动到末尾: seek(0,2)# seek(偏移量, 位置)
# 位置: 0开头, 1当前位置, 2末尾
# 移动到末尾: seek(0, 2)
11.truncate()
f = open("我的天呐", mode="r+", encoding="utf-8")
f.seek(9)
f.truncate(12) # 如果没有参数. 按照光标来阶段. 如果有参数. 截断到参数位置
f.flush()
f.close()
12.修改文件
import os # 引入os模块with open("alex", mode="r", encoding="utf-8") as f1, \open("alex_副本", mode="w", encoding="utf-8") as f2:for line in f1:new_line = line.replace("good", "sb")f2.write(new_line)os.remove("alex")
os.rename("alex_副本", "alex")
13.日志处理
result = []
with open("2018-09-12.log", mode="r", encoding="utf-8") as f:hang = f.readline()title = hang.split("|")for line in f:line = line.strip() # 去掉空白, 2018-09-11 00:00:01|刘伟|吃鸡lst = line.split("|")dic = {title[0]: lst[0], title[1]: lst[1], title[2]: lst[2]}result.append(dic)
print(result)
14.其他
破文件.txt:我是一个破文件.fasdlkhfjasdkl
操作.py:
import requests # 网络请求rs = requests.get("http://pic.netbian.com/uploads/allimg/180906/180605-153622836527b2.jpg")
f = open("壁纸.jpg", mode="wb")
f.write(rs.content)
f.flush()
f.close()
2018-09-12.log.txt:
时间|名字|action
2018-09-11 00:00:01|刘伟|吃鸡
2018-09-11 00:00:02|darin|打电话
2018-09-11 00:00:02|darin|打电话
2018-09-11 00:00:02|darin|打电话
2018-09-11 00:00:02|darin|打电话
2018-09-11 00:00:02|darin|打电话
2018-09-11 00:00:02|darin|打电话
2018-09-11 00:00:01|刘伟|吃鸡
2018-09-11 00:00:02|darin|打电话
2018-09-11 00:00:02|darin|打电话
2018-09-11 00:00:02|darin|打电话
2018-09-11 00:00:02|darin|打电话
2018-09-11 00:00:02|darin|打电话
2018-09-11 00:00:02|darin|打电话