day19三大神器和csv文件

一、迭代器

1.什么是迭代器

迭代器是容器型数据类型

特点:无法通过打印迭代器查看元素、也无法统计元素个数;

​ 需要使用元素的时候必须将元素从迭代器中取出,取出以后该元素就从迭代器中消失

2.创建迭代器 - 将其他序列转换成迭代器

i1 = iter('hello')
i2 = iter([10, 20, 30, 40])
i3 = iter({'a': 10, 'b': 20})
i4 = iter({100, 200, 300})
print(i1)       # <str_iterator object at 0x7fc25598fc40>
print(i2)       # <list_iterator object at 0x7fb21888fc70>

3.获取迭代器的元素

不管以什么的方式获取到了迭代器的元素,被获取到的元素一定会从迭代器中消失

1)获取单个元素:next(迭代器)

i1 = iter('hello')
print(next(i1))     # 'h'
print(next(i1))     # 'e'
print(next(i1))     # 'l'
print(next(i1))     # 'l'
print(next(i1))     # 'o'
# print(next(i1))     # 报错!StopIterationresult = list(i1)
print(result)       # []i1 = iter('hello')
print(list(i1))     # ['h', 'e', 'l', 'l', 'o']
# print(next(i1))     # 报错!StopIteration

2)遍历

i1 = iter('hello')
for x in i1:print(f'x:{x}')print(list(i1))

二、生成器

1.什么是生成器

生成器是一种容器,但是这个保存的不是多个数据,而是产生(创建)多个数据的算法。

同时具有迭代器保存数据的特点: 1.打印看不到内容

​ 2.不支持len操作

​ 3.元素也是取一个少一个,而且不能再放回生成器中

2.创建生成器

调用一个带有yield关键的函数就可以得到一个生成器对象。

注意:如果函数中有yield,那么调用这个函数就不会执行函数体,也不会获取函数返回值,而是创建一个生成器对象。

def func1():print('hello')yieldreturn 100result = func1()
print(result)

3.控制生成器产生数据的个数和值

生成器产生数据的个数和值,由执行函数体的时候会遇到几次yield,以及每次遇到yield的时候后的值来决定

def func2():yield 100yield 200yield 300g1 = func2()
print(list(g1))     # [100, 200, 300]
# print(next(g1))   # 报错!StopIterationdef func3():for x in range(10):yield x*2g2 = func3()

4.生成器创建数据的原理

调用函数创建生成器的时候不会执行函数体,在通过生成器对象获取生成器中的元素的时候才会执行函数,而且每次在执行函数体的时候只会执行到yield就停止,并且记录停止的位置,下次再获取元素的时候从上次结束的位置接着执行。

三、装饰器

1.装饰器

装饰器是用来给函数添加功能

1)通过过直接修改原函数的代码可以给函数添加功能

"""
存在的问题:1.如果多个函数需要添加同样的功能,需要修改多个函数的代码,并且添加相同的代码2.如果想要取消添加的功能,又要重新修改多个函数的函数
"""

2)使用装饰器

def count_time(f):def new_f(*args, **kwargs):start = time.time()result = f(*args, **kwargs)end = time.time()print(f'执行时间:{end-start}')return resultreturn new_f@count_time
def func1():print('hello world!')
# 写装饰器的套路
"""
def 装饰器名(f):def new_f(*args, **kwargs):实现新增的功能result = f(*args, **kwargs)实现新增的功能return resultreturn new_f
"""

四、csv文件操作

csv文件(逗号分隔值文件) - 让数据以表格的方式储存(更简单的表格文件)

1.csv文件读操作

# 1)方法1 - 读文件内容得到一个迭代器,迭代器中的元素是每一行内容对应的列表
# a.创建reader对象: csv.reader(文件对象)  -  创建文件对应的reader,并且获取文件内容
# 注意:打开csv文件的时候需要给参数newline赋值为空串
# f = open('files/2018年北京积分落户数据.csv', encoding='utf-8', newline='')
reader1 = csv.reader(open('files/2018年北京积分落户数据.csv', encoding='utf-8', newline=''))# b.通过reader对象(本质是一个迭代器)获取文件内容
print(next(reader1))     # ['id', 'name', 'birthday', 'company', 'score']
print(list(reader1))print('===============================================================================')
# 2)方法2 - 读文件内容得到一个迭代器,迭代器中的元素是每一行内容对应的字典(键是每一列的第一行数据)
reader2 = csv.DictReader(open('files/2018年北京积分落户数据.csv', encoding='utf-8', newline=''))
for x in reader2:print(x)

2.csv文件写操作

1)方法1 - 读文件内容得到一个迭代器,迭代器中的元素是每一行内容对应的列表

a.创建reader对象: csv.reader(文件对象) - 创建文件对应的reader,并且获取文件内容

注意:打开csv文件的时候需要给参数newline赋值为空串

# f = open('files/2018年北京积分落户数据.csv', encoding='utf-8', newline='')
reader1 = csv.reader(open('files/2018年北京积分落户数据.csv', encoding='utf-8', newline=''))# b.通过reader对象(本质是一个迭代器)获取文件内容
print(next(reader1))     # ['id', 'name', 'birthday', 'company', 'score']
print(list(reader1))

2)方法2 - 读文件内容得到一个迭代器,迭代器中的元素是每一行内容对应的字典(键是每一列的第一行数据)

reader2 = csv.DictReader(open('files/2018年北京积分落户数据.csv', encoding='utf-8', newline=''))
for x in reader2:print(x)

2.csv文件写操作

1)方法1 - 以列表为单位写入一行数据

a.创建writer对象: csv.writer(文件对象)

writer1 = csv.writer(open('files/students.csv', 'w', encoding='utf-8', newline=''))

b.写入数据

# writer对象.writerow(列表)  -  一次写入一行数据
# writer对象.writerows(元素是列表的列表)   -  同时写入多行数据
writer1.writerow(['学号', '姓名', '年龄', '电话', '分数'])
writer1.writerows([['stu001', '小明', 19, '110', 98],['stu002', '张三', 23, '199', 72],['stu003', '小花', 22, '1728', 78]
])
# 2)方法2 - 以字典为单位写入一行数据
# a.创建DictWriter对象: csv.DictWriter(文件对象, 字典的键)
writer2 = csv.DictWriter(open('files/dogs.csv', 'w', encoding='utf-8', newline=''),['狗名', '年龄', '品种', '价格']
)# b.将字典的键作为文件内容写入文件的第一行
writer2.writeheader()# c.写入数据
# writer对象.writerow(字典)  -  一次写入一行数据
# writer对象.writerows(元素是字典的列表)   -  同时写入多行数据
writer2.writerow({'狗名': '旺财', '年龄': 3, '品种': '哈巴狗', '价格': 500})
writer2.writerows([{'狗名': '猜猜', '年龄': 2, '品种': '哈士奇', '价格': 1500},{'狗名': '土豆', '年龄': 1, '品种': '土狗', '价格': 50},{'狗名': '妞妞', '年龄': 3, '品种': '金毛', '价格': 2500}
])

day19总结和作业相关推荐

  1. day19 - 每日总结及作业

    正则表达式 匹配类符号 正则表达式 正则表达式是一种可以让一些复杂的字符串问题变得简单的工具 正则语法(通用) re模块: fullmatch(正则表达式,字符串) - 判断字符串是否满足正则表达式描 ...

  2. python学习 day19

    一.类的名称空间以及对象名称空间 创建一个类就会创建一个类的名称空间,用来存储类中定义的所有名字,这些名字称为类的属性 类的两种属性:静态属性和动态属性 静态属性就是直接在类中定义的变量(字段) 动态 ...

  3. day19异常File类

    异常(异常的概述和分类) 异常(JVM默认是如何处理异常的) 异常(try...catch的方式处理异常1) 异常(try...catch的方式处理异常2) 异常(编译期异常和运行期异常的区别) 异常 ...

  4. 21天Jmeter打卡Day19 mysql数据库提取参数化

    21天Jmeter打卡Day19 JDBC连接数据库增删改查,抛出变量 https://www.jianshu.com/p/2d1a3ae8cbd7 1.安装Mysql驱动 下载地址:https:// ...

  5. 小甲鱼课后作业_【第九讲勤思课后作业】二元一次方程组的解法巩固加油站

    ☝点击蓝字关注我们 二元一次方程组解法 巩固|第9讲 二元一次方程组解法:核心是消元 两种消元方法:代入消元法和加减消元法 技巧类解法:系数轮换法和换元法 以下为第9讲勤思班作业的视频讲解 第九讲的巩 ...

  6. LeetCode简单题之在既定时间做作业的学生人数

    题目 给你两个整数数组 startTime(开始时间)和 endTime(结束时间),并指定一个整数 queryTime 作为查询时间. 已知,第 i 名学生在 startTime[i] 时开始写作业 ...

  7. 作业函数的定义与调用

    作业函数的定义与调用 在 OneFlow 中,将训练.预测任务封装在一个函数中,统称为作业函数(job function),作业函数联系用户的业务逻辑与 OneFlow 管理的计算资源. 在 OneF ...

  8. 华东理工大学计算机应用基础,最新华东理工大学计算机应用基础网上作业及全部答案...

    精品文档 华东理工大学计算机应用基础网上作业及全部答案 2012计算机应用基础答案: 一.选择题 1.文件夹是用来对应用程序.文件进行分组的,以下说法中()正确.答:一个文件夹内可以包含文件.应用程序 ...

  9. 《小团团团队》第五次作业:项目需求分析改进与系统设计

    项目 内容 这个作业属于哪个课程 任课教师博客主页链接 这个作业的要求在哪里 实验九 团队作业5-团队项目需求改进与系统设计 团队名称 小团团团队 作业学习目标 (1)掌握面向对象需求分析方法:(2) ...

最新文章

  1. 将BST转换为有序的双向链表!
  2. 持续集成实验个人总结
  3. python列表 行列选择_Python第七课——如何选取excel表格的行数据和列数据
  4. hibernate持久化对象
  5. 深入Java集合学习系列:HashSet的实现原理
  6. 7种最有效的懒人减肥方法,收藏了!
  7. php 删除前后空格,php怎么去除前面空格
  8. TopJUI通过简单的代码实现复杂的批量提交功能
  9. 各品牌路由器默认账号密码
  10. java jsp考试试题_JSP测试题一
  11. linux iometer安装教程,IOmeter 2010在Linux x64下安装
  12. 天才小毒妃 第945章 龙非夜心情很不好
  13. javabean/Listjavabean与map/Listmap互相转换
  14. Ubuntu系统 不使用snap安装firefox,使用firefox官网下载的安装包安装firefox
  15. 嵌入式驱动工程师学习路线【建议收藏】
  16. 2017年05月13日勒索软件, 勒索病毒(WannaCry)肆虐全球, 中国安全防线严重受挫
  17. CSS(列表+表格+链接+自定义鼠标光标)样式
  18. APK的安装过程分析
  19. java中pdf写成base64文件流,Java操作pdf文件与Base64编码相互转换与文件流操作
  20. 综述|基于深度学习的深度图补全

热门文章

  1. WIN7/8 系统刻录光驱识别为普通CD-ROM的解决方法
  2. 使用 jquery 制作简单QQ 聊天窗口 制作课工厂简单窗口---------2017-7-1 16:08
  3. 未成年人如何正确使用计算机,电脑如何设置未成年模式的图文教程
  4. 大数据、人工智能学习书籍推荐——Python计算机视觉编程
  5. 从股市狂跌谈集体无意识
  6. ENSP---VLAN间路由配置实验
  7. 项目团队沟通管理 5大沟通原则
  8. 和为k的子数组、中位数为k的子数组
  9. 各个架构下的linux启动流程-从linux被加载到start_kernel
  10. Python动态生成变量