总结

一.迭代器

  1. 什么是迭代器

    1. 迭代器是容器型数据类型
    2. 特点:无法通过打印迭代器查看元素、也无法统计元素个数;
    3. 需要使用元素的时候必须将元素从迭代器中取出,取出以后该元素就从迭代器中消失
  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>
    print(i3)
    print(i4)
    # print(len(i1))        # 报错!TypeError: object of type 'str_iterator' has no len()
    
  3. 获取迭代器元素

    1. 不管以什么的方式获取到了迭代器的元素,被获取到的元素一定会从迭代器中消失
    2. 获取单个元素:next(迭代器)

    3. 遍历

      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. 同时具有迭代器保存数据的特点: 1.打印看不到内容 2.不支持len操作 3.元素也是取一个就少一个,而且不能再放回生成器中
    3. 注意:生成器获取元素和迭代器获取元素的方法一样
  2. 创建生成器

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

    2. 注意: 如果函数中有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()# 练习:创建学科学号的生成器,能产生从 'python001' 到 'python999' 的学号
    def study_id(subject):for x in range(1, 1000):yield f'{subject}{x:0>3}'g3 = study_id('python')
    g4 = study_id('java')
    print(next(g3))
    print(next(g4))
    
  4. 生成器创建数据的原理

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

    def func4():print('======1======')yield 100print('======2======')yield 200print('======3======')yield 300g4 = func4()
    print(next(g4))
    print(next(g4))
    print(next(g4))def func5():yield 100yield 200yield 300# print(next(func5()))        # 100
    # print(next(func5()))        # 100
    g5 = func5()
    print(next(g5))
    print(next(g5))
    

三. 装饰器(了解)

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

  2. 写装饰器的套路

    """
    def 装饰器名(f):def new_f(*args, **kwargs):实现新增的功能result = f(*args, **kwargs)实现新增的功能return resultreturn new_f
    """
    

四.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))
      
    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}
      ])
      

三大神器和csv文件操作总结相关推荐

  1. Python三大神器和csv文件操作

    迭代器 1.什么是迭代器(iter) 迭代器是容器型数据类型 特点:无法通过打印迭代器查看元素.也无法统计元素个数:需要使用元素的时候必须将元素从迭代器中取出,而且取出以后该元素就从迭代器中消失 2. ...

  2. day19三大神器和csv文件

    ​ day19三大神器和csv文件 一 正则细则 1 匹配对象相关操作 1)匹配结果对应的字符串 匹配对象.group() - 获取整个正则表达式匹配到的结果 匹配对象.group(N) - 获取正则 ...

  3. Python三大神器(迭代器、生成器、装饰器)和csv文件操作

    三大神器和csv文件操作 迭代器 1.什么是迭代器(iter) 迭代器是容器型数据类型 特点: 无法通过打印迭代器查看元素.也无法统计元素个数 需要使用元素的时候必须将元素从迭代器中取出,取出以后该元 ...

  4. day19三大神器和csv操作总结

    day19三大神器和csv操作总结 一.迭代器 什么是迭代器(iter) 迭代器是容器型数据类型 特点:无法通过打印迭代器查看元素.也无法统计元素个数 需要使用元素的时候必须将元素从迭代器中取出,取出 ...

  5. Oracle数据库表导出和导入csv文件操作

    Oracle数据库表导出和导入csv文件操作 数据库是Oracle 9i 1.导出csv文件 这个十分简单,用pl/sql工具即可,首先选中要导出的表,右键选择Query data,在左侧出现的窗口中 ...

  6. csv文件操作和爬虫抓取豆瓣影评并生成词云图

    1. csv文件操作 csv文件windows默认是excel打开的,是一种表格式文件 import csv #导入csv的库 # 一次写入多行文本时,会多换一行,可以设置newline=" ...

  7. python中csv文件操作_python中操作csv文件

    python中操作csv文件 读取csv improt csv f = csv.reader(open("文件路径","r")) for i in f: pri ...

  8. C#写文本写Csv文件操作

    代码内容关于写入文件操作 /// <summary>/// 写csv文件或者文件文件,采用using方式自动释放内存/// </summary>/// <param na ...

  9. 文本操作的相关概念和方法+pickle序列化+csv文件操作+操作系统命令(os和os.path)+shutil模块+zipfile模块+递归算法打印目录树

    目录 一.文件操作 1.文本文件和二进制文件 2.文件操作相关模块概述 3.文件文本的写入 4.中文乱码问题的解决 5.close()关闭文件流--try异常管理 6.关闭流要点:_with上下文管理 ...

最新文章

  1. 全球化的LoRaWAN协议会给我们带来什么?
  2. C# TreeView 连续点击 不触发AfterCheck事件
  3. 微软应提前发布专用于ARM处理器的Windows 8平板电脑系统
  4. python整数转字节数组_【转】Python内置函数(7)——bytearray
  5. Qt文档阅读笔记-DTLS server解析
  6. Docker系列教程06-实战:修改Nginx首页
  7. 微信小程序-跟学笔记
  8. Linux静态库运行找不到lc,创建和使用静态库(问题:undefined reference)
  9. 数字化项目建设管理难点分析与对策
  10. 芯片自主注释流程代码
  11. XSS线上靶场---haozi
  12. 4 篇 NAR | 生物大数据时代,如何做好数据管理和再利用,发IF10+的数据库文章?...
  13. pyftpdlib 创建ftpserver
  14. 软件安装教程-Vivado2018.3/ISE14.7/Modelsim10.5/Keil5/AD18/Cadence17.2/CAD2016
  15. Tita绩效宝:2022年,如何实施持续绩效管理
  16. WordPress不可忽视的面包屑导航SEO优化技巧
  17. 中国石油大学浏览器 服务器系统,中国石油大学信息中心
  18. 4.19黄金白银TD纸白银行情如何把握,最新行情策略
  19. 网络蚂蚁与FlashGet的文件多线程下载原理
  20. 济南区县(功能区)分布

热门文章

  1. Swift中对象序列化的实现
  2. matlab mamdani,模糊推理的Mamdani算法及其Matlab实现
  3. 解码拼控设备输出线接大屏后,大屏仍显示无信号怎么办?
  4. 解决GitHub图床图片无法显示的问题
  5. 一个程序员产品开发中的吐槽和体会
  6. Xcode - 直接截取手机的屏幕图片,并保存到电脑
  7. StackExchange.Redis.RedisConnectionException: No connection is available to service this operation:
  8. Ubuntu 默认dash修改bash
  9. 7-10 用虚函数计算各种图形的面积 (10 分)
  10. 如何加入OAI邮件列表