目录
  • 读取和写入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)  # 李四