Python进阶

本文详细介绍了Python中进阶的数据操作,包括读取和写入CSV文件,以及在列表、字典和集合中根据条件筛选数据的方法。通过多个示例展示了如何在列表中过滤元素,如何在字典中查找满足特定条件的键值对,以及如何在集合中进行条件筛选。此外,还探讨了为元组中的每个元素命名的三种方法,如使用数值常量、枚举类和collections.namedtuple。文章内容深入浅出,适合有一定Python基础的学习者提高技能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

  • 读取和写入CSV文件
  • 在列表,字典,集合中根据条件筛选数据
    • 列表
    • 字典
    • 集合
  • 为元组中的每个元素命名
    • 方法1:使用一系列的数值常量
    • 方法2:使用枚举类
    • 方法3:使用标准库中collections.namedtuple代替内置tuple

读取和写入CSV文件

读取文件中学生成绩高于60的数据,并写入新的文件中

import csv
# 写入文件
with open("test.csv", 'w', encoding='utf-8') as wf:
    writes = csv.writer(wf)
    writes.writerow(["id", "name", "age", "score"])
    writes.writerow([1, "李四", 14, 45.4])
    writes.writerow([2, "张三", 18, 61])
    writes.writerow([3, "王二", 35, 30.1])
    writes.writerow([4, "麻子", 44, 88])

# 读取文件中学生成绩高于60的数据,并写入新的文件中
with open("test.csv", 'r', encoding='utf-8') as rf:
    # 获取读取的句柄
    reader = csv.reader(rf)
    # 通过next()获取头部
    headers = next(reader)
    # 写入新的文件中
    with open("newFile.csv", 'w', encoding='utf-8') as wf:
        # 获取写入句柄
        writes = csv.writer(wf)
        # 写入刚才获取的头部
        writes.writerow(headers)
        # 读取每一行数据
        for student in reader:
            # 获取成绩的列
            score = student[-1]
            # 判断成绩的列存在且大于等于60
            if score and float(score) >= 60:
                # 写入新文件中
                writes.writerow(student)

在列表,字典,集合中根据条件筛选数据

列表
from random import randint

l = [randint(-10, 10) for i in range(10)]
# 方法1-列表解析
m = [x for x in l if x >= 0]  # [8, 7, 10, 1, 4]
# 方法2-filter()方法
n = filter(lambda x: x >= 0, l)
print(list(n))

字典
# 字典
d = {"student%d" % d: randint(50, 100) for d in range(21)}
# 方法1-字典解析
dc = {k: v for k, v in d.items() if v > 90}
print(dc)
# 方法2-filter()方法
dn = filter(lambda x: x[1] > 90, d.items())
print(dict(dn))

集合
# 集合
s = {randint(-10, 10) for x in range(10)}
# 方法1-集合解析
sm = {x for x in s if x >= 0}
print(sm)
# 方法2-使用filter()方法
sd = filter(lambda x: x >= 0, sm)
print(set(sd))

为元组中的每个元素命名

方法1:使用一系列的数值常量
# 为元组中每一个元素命名
# 方法1:使用一系列的数值常量
NAME, AGE, SEXE, EMAIL = range(4)
stu = ("李四", 16, "man", "pyj.moon@gmail.com")


def get_func(student):
    # 通过常量命名
    if student[AGE] < 18:
        print(student[0] + "的年龄小于18")
    if student[SEXE] == "male":
        print(student[0] + "的性别为:male")


get_func(student=stu)

方法2:使用枚举类
# 导入int型的枚举类
from enum import IntEnum


class StuentEnum(IntEnum):
    NAME = 0
    AGE = 1
    SEXE = 2
    EMAIL = 3


print(stu[StuentEnum.NAME])  # 李四
print(isinstance(StuentEnum.NAME, int))  # True StuentEnum.NAME是int的实例

方法3:使用标准库中collections.namedtuple代替内置tuple
# 方法3:使用标准库中collections.namedtuple代替内置tuple
from collections import namedtuple

# 第一个参数,命名元组的名字;第二个参数,每个元素的名字
s1 = namedtuple("StudentTest", ["name", "age", "sex", "email"])
# 使用命名元组创建一个元组
s2 = s1("李四", 16, "man", "pyj.moon@gmail.com")
print(s2)
# 使用命名元组的方式,访问字段
print(s2.name)  # 李四

目录

  • 读取和写入CSV文件
  • 在列表,字典,集合中根据条件筛选数据
    • 列表
    • 字典
    • 集合
  • 为元组中的每个元素命名
    • 方法1:使用一系列的数值常量
    • 方法2:使用枚举类
    • 方法3:使用标准库中collections.namedtuple代替内置tuple

读取和写入CSV文件

读取文件中学生成绩高于60的数据,并写入新的文件中

import csv
# 写入文件
with open("test.csv", 'w', encoding='utf-8') as wf:
    writes = csv.writer(wf)
    writes.writerow(["id", "name", "age", "score"])
    writes.writerow([1, "李四", 14, 45.4])
    writes.writerow([2, "张三", 18, 61])
    writes.writerow([3, "王二", 35, 30.1])
    writes.writerow([4, "麻子", 44, 88])

# 读取文件中学生成绩高于60的数据,并写入新的文件中
with open("test.csv", 'r', encoding='utf-8') as rf:
    # 获取读取的句柄
    reader = csv.reader(rf)
    # 通过next()获取头部
    headers = next(reader)
    # 写入新的文件中
    with open("newFile.csv", 'w', encoding='utf-8') as wf:
        # 获取写入句柄
        writes = csv.writer(wf)
        # 写入刚才获取的头部
        writes.writerow(headers)
        # 读取每一行数据
        for student in reader:
            # 获取成绩的列
            score = student[-1]
            # 判断成绩的列存在且大于等于60
            if score and float(score) >= 60:
                # 写入新文件中
                writes.writerow(student)

在列表,字典,集合中根据条件筛选数据

列表
from random import randint

l = [randint(-10, 10) for i in range(10)]
# 方法1-列表解析
m = [x for x in l if x >= 0]  # [8, 7, 10, 1, 4]
# 方法2-filter()方法
n = filter(lambda x: x >= 0, l)
print(list(n))

字典
# 字典
d = {"student%d" % d: randint(50, 100) for d in range(21)}
# 方法1-字典解析
dc = {k: v for k, v in d.items() if v > 90}
print(dc)
# 方法2-filter()方法
dn = filter(lambda x: x[1] > 90, d.items())
print(dict(dn))

集合
# 集合
s = {randint(-10, 10) for x in range(10)}
# 方法1-集合解析
sm = {x for x in s if x >= 0}
print(sm)
# 方法2-使用filter()方法
sd = filter(lambda x: x >= 0, sm)
print(set(sd))

为元组中的每个元素命名

方法1:使用一系列的数值常量
# 为元组中每一个元素命名
# 方法1:使用一系列的数值常量
NAME, AGE, SEXE, EMAIL = range(4)
stu = ("李四", 16, "man", "pyj.moon@gmail.com")


def get_func(student):
    # 通过常量命名
    if student[AGE] < 18:
        print(student[0] + "的年龄小于18")
    if student[SEXE] == "male":
        print(student[0] + "的性别为:male")


get_func(student=stu)

方法2:使用枚举类
# 导入int型的枚举类
from enum import IntEnum


class StuentEnum(IntEnum):
    NAME = 0
    AGE = 1
    SEXE = 2
    EMAIL = 3


print(stu[StuentEnum.NAME])  # 李四
print(isinstance(StuentEnum.NAME, int))  # True StuentEnum.NAME是int的实例

方法3:使用标准库中collections.namedtuple代替内置tuple
# 方法3:使用标准库中collections.namedtuple代替内置tuple
from collections import namedtuple

# 第一个参数,命名元组的名字;第二个参数,每个元素的名字
s1 = namedtuple("StudentTest", ["name", "age", "sex", "email"])
# 使用命名元组创建一个元组
s2 = s1("李四", 16, "man", "pyj.moon@gmail.com")
print(s2)
# 使用命名元组的方式,访问字段
print(s2.name)  # 李四

提问和评论都可以,用心的回复会被更多人看到 评论

发布评论

全部评论 () 最热 最新

相关文章

  • [

    python进阶-python MySQL

    目录准备出发MySQL 数据库安装 MySQL 驱动程序测试 MySQL Connector创建连接一、Python 创建数据库1、创建数据库2、检查数据库是否存在二、Python 创建表1、创建表2、检查表是否存在3、主键三、Python Insert Into Table1、插入表2、插入多行3、获取已插入 ID四、Python Select From1、从表中选取2、选取列3、使用 fetc

    ](https://blog.51cto.com/u_15221348/2884630)

    MySQL

  • [

    python进阶例题

    python进阶hello,大家好,我是Dream上次给大家带来了python基础例题(关注我可以看到哟),这次给大家整理了一些进阶的知识点和例题,希望大家喜欢!首先和大家分享一个有意思的东西:当当当当~就是这个进度条了,我感觉老有意思了,哈哈哈这是它的代码,大家可以参考一下:import timefrom tqdm import tqdmfor i in tqdm(r

    ](https://blog.51cto.com/u_15492594/4968971)

    python ico 下划线

  • [

    python Queue进阶

    创建一个“队列”对象import Queuemyqueue = Queue.Queue(maxsize = 10)Queue.Queue类即是一

    ](https://blog.51cto.com/u_15129547/5503841)

    python 等待时间 数据

  • [

    Python进阶 – 文件

    目录文件目标01. 文件的概念1.1 文件的概念和作用1.2 文件的存储方式文本文件和二进制文件02. 文件的基本操作2.1 操作文件的套路2.2 操作文件的函数/方法2.3 read 方法 —— 读取文件文件指针(知道)2.4 打开文件的方式2.5 按

    ](https://blog.51cto.com/u_15743016/5549340)

    python 开发语言 后端 打开文件 字符串

  • [

    python ftplib 进阶

    Python中的ftplib模块Python中默认安装的ftplib模块定义了FTP类,其中函数有限,可

    ](https://blog.51cto.com/u_15129547/5580694)

    python 上传 ftp服务器

  • [

    python进阶资源

    本文为不同阶段的Python学习者从不同角度量身定制了49个学习资源。 初学者Welcome to Python.org​​https://www.python.org/​​官方Python站点提供了一个开始使用Python生态系统和学习Python的好方法,包括官方文档。 Learning Python The Hard Way​​https://learnpythonthe

    ](https://blog.51cto.com/u_11045899/5344415)

    python python3 资源 学习 进阶

  • [

    python 进阶语法

    条件(判断)语句在 Python 中,条件语句又叫作判断语句,由 if、 elif和 else 3 种语句组成,其中 if 为强制语句,可以独立使用,elif 和 else 为可选语句,并且不能独立使用。判断语句配合布尔值,通过判断一条或多条语句的条件是否成立(True 或 者 False),从而决定下一步的动作,如果判断条件成立(True),则执行 if 或 elif 语句下的代码;如果判断条件

    ](https://blog.51cto.com/u_15450494/5208100)

    python 循环与判断 文件的读写 函数与模块 正则表达式与异常处理

  • [

    Python进阶 – 异常

    目录异常目标01. 异常的概念02. 捕获异常2.1 简单的捕获异常语法简单异常捕获演练 —— 要求用户输入整数2.2 错误类型捕获异常类型捕获演练 —— 要求用户输入整数捕获未知错误2.3 异常捕获完整语法03. 异常的传递04.

    ](https://blog.51cto.com/u_15743016/5549339)

    python 开发语言 后端 错误类型 抛出异常

  • [

    Python进阶小结

    目录一、异常TODO二、深浅拷贝2.1 拷贝2.2 浅拷贝2.3 深拷贝三、数据类型内置方法3.1.1 整型3.1.2 浮点型3.1 数字类型内置方法3.2 字符串类型内置方法3.3 列表类型内置方法3.4 元祖类型内置方法3.5 字典类型内置方法3.6 集合类型内置方法3.7 布尔类型四、数据类型分类4.1 按值个数4.2 按有序无序4.3 按可变不可变一、异常TODO万能捕捉异常公式try:

    ](https://blog.51cto.com/u_13804357/2708717)

    Python

  • [

    Python进阶—Matplotlib

    Matplotlib再来一次文章目录一、基础用法二、figure图像三、设置坐标轴四、legend图例五、标注六、散点图七、直方图八、等高线图九、3D图十、sub

    ](https://blog.51cto.com/u_14608932/5434706)

    python 计算机视觉 开发语言 Matplotlib 3d

  • [

    Python进阶—Pandas

    Pandas再来一次文章目录一、Series和DataFrame二、选择数据三、赋值及操

    ](https://blog.51cto.com/u_14608932/5976372)

    python 开发语言 后端 数据 多列

  • [

    Python进阶—Numpy

    Numpy 再来一遍文章目录一、Numpy的属性二、创建array三、Numpy的运算四

    ](https://blog.51cto.com/u_14608932/5976373)

    python 矩阵 机器学习 数据 最小值

  • [

    python 进阶课程

    数据结构、链表操作 数据结构 逻辑结构 存储结构 线性表的链式存储 单链表类构建 删除节点 获取节点 栈、队列 栈 栈模型 栈的链式栈 队列 队列的操作:入队、出队、 链式队列 二叉树、算法基础 树形结构 二叉树 二叉树实践 1 class Node: 层次遍历 算法基础 排序 # 选择排序 lin

    ](https://blog.51cto.com/wekenw/5158881)

    套接字 链表 数据

  • [

    python进阶_浅谈面向对象进阶

    python进阶_浅谈面向对象进阶学了面向对象三大特性继承,多态,封装。今天我们看看面向对象的一些进阶内容,反射和一些类的内置函数。一、isinstance和issubclass class Foo: pass class Son(Foo): pass s = Son()#判断一个对象是不是这…

    ](https://blog.51cto.com/u_15072918/3687384)

    python 面向对象 内置函数 属性值 字符串

  • [

    Python语法进阶

    Python进阶 一、装饰器 1. 包的概念及基本使用 闭包的概念:在一个外函数中定义了一个内函数,内函数里运用了外函数的临时变量,并且外函数的返回值是内函数的引用。这样就构成了一个闭包。 闭包构成的条件: 存在函数的嵌套关系 内层函数引用了外层函数的临时变量 外层函数返回内层函数的引用(地址) 2 …

    ](https://blog.51cto.com/u_15127506/3869634)

    浅拷贝 类名 python 环境变量 对象名

  • [

    Python—进阶综合

    01-异常 1.1 异常捕获 在调试程序时难免遇到抛出的异常,为了对集中的异常进行处理,可以使用异常捕获进行预判 try: # 尝试执行的代码 pass except 错误类型1: # 针对错误类型1,对应的代码处理 pass except (错误类型2, 错误类型3): # 针对错误类型2 和 3 …

    ](https://blog.51cto.com/u_15127607/4353003)

    python 打开文件 当前目录 抛出异常 文件指针

  • [

    python进阶2

    IO编程 文件读写: with open(‘file’,‘r’,encoding=‘gbk’) as f: #读gbk编码的文件 f.read() StringIO和BytesIO : 内存读写;f.getvalue():获得写入后的内存文件内容 操作文件和目录:操作文件和目录的函数一部分在os模块 …

    ](https://blog.51cto.com/u_15127595/3263661)

    json 序列化 子进程 字符串 当前目录

  • [

    python函数进阶

    函数进阶 函数执行传参时,传递的是内存地址 浅拷贝是拷贝的内存地址 深拷贝是拷贝的内存地址 函数的返回值是内存地址 def func(): data = [11, 22, 33] return data ​ v1 = func() print(v1) # [11,22,33] 上述代码的执行过程: …

    ](https://blog.51cto.com/u_15127576/3375451)

    老男孩学习笔记 python 内存地址 赋值 引用计数

  • [

    Python学习进阶

    阅读目录 一、python基础 二、python高级 三、python网络 四、python算法与数据结构 一、python基础 人生苦短,我用Python(1) 工欲善其事,必先利其器(2) python基础-变量运算符(3) python基础-分支判断语句(4) python基础-循环语句(5)

    ](https://blog.51cto.com/u_15127608/4592308)

    python 数据结构 web服务器 面向对象 快速排序

  • [

    python打开import引用的函数 python中的import函数

    1.importimport引入或者叫做导入模块或者模块中的几个函数。   1)、导入模块  import 模块名  比如 import math  2)、导入某个包里或者多层包里的模块(若干个包名).模块名  比如 import p1.math     import p1.p2.p3.math  3)、导入模块里的某几个函数  from 模块名 import 函数名,函数名

    ](https://blog.51cto.com/u_16099221/6388506)

    python打开import引用的函数 包名 旧版 新版本

  • [

    java 数据结构 链表 java实现链表

    java实现链表一、单向链表单指针,指针指向下一个元素指定位置新增元素,如果是在头部位置,先初始化节点,将头部节点赋值给这个节点的下一位指针,如果不是头部位置,循环遍历链表找到要插入的位置,将当前节点的下一位指针指向新增节点的下一位指针,然后将新增节点赋值给当前节点的下一位指针。删除节点,循环遍历链表,找到要删除位置的元素,然后设置头部节点和头部节点的下一位,循环遍历,每一次遍历不仅要找到当前节点

    ](https://blog.51cto.com/u_13019/6389710)

    java 数据结构 链表 算法 链表 下标越界 System

  • [

    java 读文件 重复内容 java从文件中读取数据

    将文件中的数据读入程序,是将程序外部的数据传入程序中,应该使用输入流——InputStream或Reader。而由于读取的是特定的数据源——文件,则可以使用输入对应的子类FileInputStream或FileReader实现。 在实际书写代码时,需要首先熟悉读取文件在程序中实现的过程。在Java语言的IO编程中,读取文件是分两个步骤:1、将文件中的数据转换为流(由系统完成,只需要创建对应的流对象

    ](https://blog.51cto.com/u_14405/6389737)

    java 读文件 重复内容 java 数据 数组 读取文件

  • [

    java pdf输出 java打印pdf文件

    最近公司要求开发打标系统,在调用打印机方面花了些时间,这里做下整理。1、编译工具及环境:eclipse+jdk1.8+tomcat8.5+ireport5.0.1+jasperreports4.5.1+火狐浏览器2、调用打印机方式可分为两种:这里是用ireport设计好模板后生成jasper文件,后台调用jasper文件并传输数据生成pdf文件放到项目根目录下的temp文件夹中,这块代码就不放了,

    ](https://blog.51cto.com/u_13354/6390077)

    java pdf输出 java调用打印机 客户端 服务器 加载

  • [

    java 递归遍历json java如何递归

    Java 方法递归 1 方法递归的含义 递归算法是一种直接或间接地调用自身的算法。 2 使用递归的条件 一个问题若满足以下三个条件往往都可以使用递归来解决:

    ](https://blog.51cto.com/u_16099210/6390722)

    java 递归遍历json 递归算法 java 递归 System

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值