三大神器和CSV文件操作学习总结

一、三大神器

  1. 迭代器(iter)

    容器型数据类型

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

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

    • 创建迭代器 —— 将其他序列转换成迭代器

      i1 = iter('hello')
      i2 = iter([10, 20, 30, 40])
      i3 = iter({'a':10, 'b':30,})
      i4 = iter{100, 2000, 30000}
      
    • 获取迭代器的元素

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

      • 获取单个元素: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))     #报错!StopIteration
        
      • 遍历:for循环

        i1 = iter('hello')
        for x in i1:print(x)
        
  2. 生成器 (yield)

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

    同时具有迭代器保存数据的特点:打印看不到内容;不支持len操作;元素取一个少一个,而且不能再放回生成器中

    注意:生成器获取元素与迭代器获取元素的方法一样

    • 创建生成器

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

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

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

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

      def func2():yield 100yield 200yield 300g1 = func2()
      print(list(g1))     #[100,200,300]
      
    • 生成器创建数据的原理

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

  3. 装饰器

    用来给函数添加功能

    • 通过过直接修改原函数的代码可以给函数添加功能
      存在的问题:

      • 如果多个函数需要添加同样的功能,需要修改多个函数的代码,并且添加相同的代码

      • 如果想要取消添加的功能,又要重新修改多个函数的函数

      • 写装饰器的套路

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

二、CSV文件操作

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

  1. csv文件读操作

    • 方法1:

    • 创建reader对象:csv.reader(文件对象)

      f = open('文件路径', enconding='UTF-8',newline='').read()
      reader1 = csv.reader(f)
      
    • 通过reader对象获取文件内容(本质为迭代器)

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

      reader2 = csv.DictReader(open('文件路径',encoding='utf-8' , newline=''))
      for x in reader2 :
      print(x)
      
  2. csv文件写操作

    • 方法1:以列表为单位写入一行数据

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

        writer1 = csv.writer(open('files/students.csv', 'w',encoding='utf-8',newLine=''))
        
      • 写入数据

        writer对象.writerow(列表)— 一次写入一行数据

        writer1.writerow(['学号','姓名','年龄','电话','分数'])
        

        writer对象.writerows(元素是列表的列表) — 同时写入多行数

        writer1.writerows([['stu001','小明',19,'110',98],['stu002','张三',23,'199',72],['stu003','小花',22,'1728',78]
        ]
        
    • 方法2:以字典为单位写入一行数据

      • 创建DictWriter对象:csv.DictWriter(文件对象,字典的键)

        writer2 = csv.DictWriter(open('files/dogs.csv', 'w', encoding='utf-8', newline=''),['狗名', '年龄', '品种', '价格']
        )
        
      • 将字典的键作为文件内容写入文件的第一行

        writer.writerheader()
        
      • 写入数据

        writer对象.writerow(字典)-一次写入一行数据

        writer2.writerow({'狗名': '旺财', '年龄': 3, '品种': '哈巴狗', '价格': 500})
        

        writer对象.writerows(元素是字典的列表)-同时写入多行数据

        writer2.writerows([{'狗名': '猜猜', '年龄': 2, '品种': '哈士奇', '价格': 1500},{'狗名': '土豆', '年龄': 1, '品种': '土狗', '价格': 50},{'狗名': '妞妞', '年龄': 3, '品种': '金毛', '价格': 2500}
        ])
        

Python日志17相关推荐

  1. Python日志库logging、loguru、Eliot

    文章目录 简介 初试 日志基础教程 消息格式 日志属性 信息流程 通过配置文件创建 PyCharm日志插件 封装 loguru入门 Eliot入门 参考文献 简介 logging,Python内置库, ...

  2. python日志输出到屏幕,python日志写入文件

    python日志输出到屏幕,python日志写入文件 日志 日志是跟踪软件运行时所发生的事件的一种方法.软件开发者在代码中调用日志函数,表明发生了特定的事件.事件由描述性消息描述,该描述性消息可以可选 ...

  3. Python日志教程

    # Python日志教程 日志对于系统开发的开发.调试和运行整个过程中都起着很重要的作用,调试阶段需要查看日志来明确问题所在,运行阶段如果程序崩溃,日志可以记录程序崩溃的相关原因. 刚初学Python ...

  4. 基于 MongoDB 的 python 日志功能

    本文首发于 Gevin的博客 原文链接:基于MongoDB的python日志功能 未经 Gevin 授权,禁止转载 基于MongoDB的python日志功能 why-log-to-mongodb 我几 ...

  5. Python日志详解【两篇就够了系列】--第二篇loguru

    目录 第二章 Python日志loguru库详解 一.loguru简介 二.日志级别 三.loguru日志常用参数配置解析 1.rotation 2.retention 3.compression 4 ...

  6. Python日志详解【两篇就够了系列】--第一篇logging

    目录 第一章 Python日志模块logging详解 一.logging的框架 1.Logger 2.Handler 3.Formater类 4.Filter类 二.Log级别 三.Log格式 四.常 ...

  7. 【Python日志输出】控制台输出INFO和WARNING级别,文件只记录WARNING级别

    参考博客 - Python日志分级别输出到不同文件 参考思路:为logger设置2个handler,再对2个handler设置不同的filter进行日志过滤. 通过supervisor管理项目时,会有 ...

  8. python读取日志错误信息_关于修复 Bug 这件“小事”|利用Python 日志查找错误也可行...

    在 Python 中使用 print() 来输出某个变量从而检查参数错误是修 Bug 前期工作的常用手段.但其实 Python 日志处理用得好会节省时间用于修Bug.记日志会帮助我们理解程序中发生的事 ...

  9. 一个简单的python日志服务器

    一个简单的python日志服务器,主要目的是搜集各python logging记录的日志,将其简单汇总.源码如下: # -*- coding: utf-8 -*- ''' Created on 201 ...

最新文章

  1. Python3破冰人工智能,你需要掌握一些数学方法
  2. C# 托管资源和非托管资源
  3. 实现php实现价格的排序,PHP实现二维数组排序(按照数组中的某个字段)
  4. MATLAB读写Excel数据
  5. 解决 asp.net 伪静态 IIS设置后 真正的HTML无法显示的问题
  6. Tokyo Tyrant优势
  7. openmeetings2.0安装和开发
  8. python怎么重复程序,如何重复运行python程序
  9. [转载]马士兵Java视频教程 —— 学习顺序
  10. 注册表学习笔记-注册表文件的组成
  11. 计算机软件方面的核心期,计算机方面期刊_计算机方面适合阅读的期刊_计算机八大核心期刊...
  12. Java链表-链表反转
  13. Matlab-数值计算方法作业
  14. Linux下的永中 Office 2004(转)
  15. 杰理之串口1使用固定引脚的配置方法【篇】
  16. 无缝衔接的人会遭报应吗_树洞网-秘密-大树洞 -第6页-在这里,我们为您寄存秘密、心事...
  17. VRP基础介绍:VRP基础
  18. [翻译] 在 Overleaf 中使用参考文献
  19. Dell T7920工作站 拆装硬盘
  20. 笔记本怎样外接显示器 笔记本外接显示器方法【详解】

热门文章

  1. 为什么要用全文搜索引擎:全文搜索引擎 VS 数据库管理系统
  2. oracle 表带ip全称_网络设备和数据链路名称
  3. 计及电转气协同的含碳捕集与垃圾焚烧虚拟电厂优化调度
  4. Python中的bytes与bytearray详解
  5. 高德地图浏览器精确定位
  6. jQuery绑定事件的方法四种方法
  7. 人民日报问诊移动政务 呼唤打通三大堵点
  8. redis查看端口号命令
  9. Ubuntu16.04执行sudo apt-get update时出现其他软件更新错误
  10. 校园网认证页面不能自动弹出