Python之数据类型

130 阅读5分钟

代码

import csv

with open("tourist_data.csv", "r", encoding="gbk") as file:
    # 通过列表方式进行读取
    r = csv.reader(file)
    for row in r:
        print(row)
    file.seek(0) # 将文件指针重新指向文件开头
    # 通过字典方式进行读取
    r = csv.DictReader(file)
    for row in r:
        print(row['日期'], row['九寨沟'], row['张家界'], row['香港'], row['东部华侨城'], row['上海迪士尼'])

# csv文件的写入
data_li = [
    ['姓名', '年龄', '出生地'],
    ['张三', 18, '北京'],
    ['李四', 19, '上海'],
    ['王五', 20, '武汉']
]

# 1.csv.writer
with open("../第四章/test.csv", "w", newline="", encoding="utf-8") as file:
    w = csv.writer(file)
    # 写入数据
    w.writerows(data_li)

# 2. csv.DictWriter
data_dc = [
    {'姓名':'张三', '年龄':18, '出生地':'北京'},
    {'姓名':'李四', '年龄':19, '出生地':'上海'},
    {'姓名':'王五', '年龄':20, '出生地':'武汉'}
]
with open("test1.csv", "w", newline="", encoding="utf-8") as file:
    fields = ['姓名', '年龄', '出生地']
    w = csv.DictWriter(file, fieldnames=fields)
    # 写入标题行
    w.writeheader()
    # 写入数据
    w.writerows(data_dc)

import datetime
# dt = datetime.datetime(2025, 9, 15)
dt = datetime.datetime.now() # 返回当前时间
print(dt)
# 将时间类型转换成字符串类型
print(dt.strftime("%Y-%m-%d, %H-%M-%S"))
# 将字符串类型的日期时间转换成datetime类型的变量
dt1 = dt.strptime("2025:9:15 10:21:21","%Y:%m:%d %H:%M:%S")
print(dt1)

import time
now = time.localtime(time.time())
print(now)
s = time.strftime("%Y-%m-%d, %H-%M-%S", now)
dt2 = time.strptime("2025:9:15 10:21:21", "%Y:%m:%d %H:%M:%S")
print(s)
print(dt2)

# 时间对象的算术运算
dt1 = datetime.datetime(2025, 9, 15)
dt2 = datetime.datetime(2025, 9, 15)
delta = dt1 - dt2
print(delta)
delta1 = datetime.timedelta(days=365)
dt3 = dt1 + delta1
print(dt3)
# 元祖生成器表达式
tp1 = tuple(i for i in range(1,11) if i % 2 == 0)
print(tp1)
tp2 = tuple(i for i in range(1,11) if i % 2 != 0)
print(tp2)
tp3 = tp1 + tp2
print(tp3)
tp4 = tp3*3
print(tp4)
print(tp4.count(2))
print(len(tp4))
print(max(tp4))
print(min(tp4))
print(sum(tp4))
print(sorted(tp4))
print(any(tp4))
tp4 = (0, 1, 2)
# 只要有一个元素为假/0,返回False
print(all(tp4))
# any:任何一个元素为真/不为0,返回True
print(any(tp4))

li = list(i for i in range(1, 11))
print(li)
li.append(11)
print(li)
li.pop(0)  # 指定索引位置
print(li)
li.append(10)
li.append(11)
print(li)
li.remove(11)  # 指定具体的值进行删除,同时删除第一次出现的值
print(li)
li.sort(reverse=True)  # 内置排序函数,逆序
print(li)

# map+匿名函数lambda
a_list = [1, 2, 3, 4, 5, 6, 7, 8]
li = list(map(lambda x: x**3, a_list))
print(li)

print(a_list[0:6:-2])
print(a_list[-1::-1])
print(a_list[-1::-2])

import datetime
# 字典
# hash函数去判断哪些对象可以作为字典的键
print(hash(1.5))

# 利用dict函数和zip函数构造字典
keys = ["姓名", "年龄", "出生地"]
values = ["张三", 18, "武汉", "北京"]
dc1 = dict(zip(keys, values))
print(dc1)
print(dc1["出生地"])

# update pop
dc2 = {"性别":"男", "姓名":"李四"}
dc1.update(dc2)
print(dc1)
# values() keys()
print(list(dc1.values()))
print(list(dc1.keys()))

# del
del dc1["出生地"]
print(dc1)

# 集合
a_set = {1, 2, 3}
b_set = {1, 2, 3, 4, 5}
# 判断集合a是否为集合b的子集
print(a_set.issubset(b_set))
# 判断集合b是否为集合a的超集
print(b_set.issuperset(a_set))
# 判断两个集合是否相等
print(a_set == b_set)

# 为集合添加元素 add
a_set.add(4)
a_set.add(5)
print(a_set)
# 为集合b删除元素
b_set.remove(5)
print(b_set)
# 判断集合a是否为集合b的子集
print(a_set.issubset(b_set))
# 判断集合b是否为集合a的超集
print(b_set.issuperset(a_set))
# 判断两个集合是否相等
print(a_set == b_set)

一、时间模块操作(datetimetime模块)

1. datetime模块

  • 获取当前时间:通过datetime.datetime.now()获取当前日期时间对象,直接打印或提取年、月、日、时、分、秒等属性。
  • 时间格式化:使用strftime()方法将时间对象转换为指定格式的字符串(如"%Y-%m-%d %H:%M:%S")。
  • 字符串转时间对象:使用strptime()方法将特定格式的字符串(如"2023-10-01 12:00:00")转换为时间对象。
  • 时间运算:通过timedelta实现时间增减(如当前时间加 3 天、减 2 小时),并计算两个时间对象的差值(返回timedelta对象,包含天数、秒数等信息)。

2. time模块

  • 获取时间:time.localtime()获取本地时间的结构化对象(包含年、月、日等字段),time.time()获取时间戳(从 1970 年 1 月 1 日至今的秒数)。
  • 时间格式化与转换:time.strftime()将结构化时间对象转为字符串,time.strptime()将字符串转为结构化时间对象,time.ctime()直接将时间戳转为可读性字符串。

二、数据结构操作

1. 元组(tuple)

  • 创建:通过生成器表达式((i for i in range(10) if i%2==0))结合tuple()创建元组。
  • 操作:演示元组的拼接(+)、重复(*)、元素计数(count())、长度(len())、最大值(max())、最小值(min())、求和(sum()),以及all()(判断所有元素为真)、any()(判断至少一个元素为真)的逻辑判断。

2. 列表(list)

  • 基础操作:创建列表、append()添加元素、pop()(按索引删除)和remove()(按值删除)、sort()排序(默认升序,reverse=True降序)。
  • 批量处理:结合map()lambda函数对列表元素进行批量运算(如list(map(lambda x: x*2, [1,2,3]))实现元素翻倍)。
  • 切片:演示正向切片([start:end])、反向切片([-3:-1])、步长切片([::2]取偶数索引元素)等用法。

3. 字典(dict)

  • 创建:通过zip()将两个列表(键和值)组合,再用dict()转换为字典。
  • 操作:update()更新字典(添加新键值对或修改已有键)、keys()/values()获取所有键 / 值、del删除指定键值对,以及hash()函数判断对象是否可作为字典的键(不可哈希对象如列表不能作为键)。

4. 集合(set)

  • 定义:通过{}set()创建集合(元素唯一、无序)。
  • 关系判断:issubset()(子集)、issuperset()(超集)、==(相等性)判断两个集合的关系。
  • 元素操作:add()添加元素、remove()删除指定元素(元素不存在会报错)。