智泊Python--Day11

智泊Python–Day11

  Day11 转向「标准库实战」——不写业务,而是用 Python 自带模块搞定日常任务。os 管文件系统、json 管数据交换格式、time/datetime 管时间、文件操作管读写磁盘。这四块是写脚本的刚需:配环境、读配置、记日志、存结果全都用得上。

 

1.os模块

  os 用于和系统打交道、操作文件 / 文件夹。os.mkdir / os.makedirs 建目录(后者建多层),os.remove / os.rmdir 删文件 / 空目录,os.rename 重命名,os.listdir 列目录内容。真正的精华在 os.path 子模块:exists / isdir / isfile 判断存在性与类型,join 拼路径(跨平台安全),split / splitext 拆目录与扩展名,abspath 取绝对路径,getsize 取大小。路径里反斜杠多时,用 r'...' 原始字符串 避免被当成转义。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
import os

# os 模块主要用于获取系统的功能 主要用于操作文件或者文件夹

print(os.name) # 获取当前系统的类型
print(os.getcwd()) # 获取当前工作目录


# 创建目录
# os.mkdir('test') # 创建目录 test 如果目录存在会报错
# 创建多层目录
# os.makedirs('test1/test2/test3') # 创建目录 test1/test2/test3 如果目录存在会报错

# 删除目录
# os.rmdir('test') # 删除目录 test 如果目录不存在会报错 不是空目录也会报错
# 删除多层目录
# os.removedirs('test1/test2/test3') # 删除目录 test1/test2/test3 如果目录不存在会报错
# 删除文件
# os.remove('test.txt') # 删除文件 test.txt 如果文件不存在会报错

# 重命名目录
# os.rename('test', 'test11') # 重命名目录 test1 为 test11

# 返回目录下的所有文件和子目录 返回的是一个列表
# print(os.listdir()) # 返回当前目录下的所有文件和子目录
# print(os.listdir('test1')) # 返回 test1 目录下的所有文件和子目录


# os.path

# r 表示原始字符串 不会转义特殊字符
# os.path.exists(r'C:\Users\Administrator\Desktop\test') # 判断目录、文件是否存在
# os.path.isdir(r'C:\Users\Administrator\Desktop\test') # 判断是否是目录
# os.path.isfile(r'C:\Users\Administrator\Desktop\test') # 判断是否是文件

# 合并路径
# os.path.join(r'C:\Users\Administrator\Desktop\test', 'test1')
# C:\Users\Administrator\Desktop\test\test1


# 需求,将指定目录下的子目录的绝对路径打印
path = r'd:\ZHIBOCODE\test1'
print(os.listdir(path))
for item in os.listdir(path):
print(os.path.join(path, item))


# os.path.split() 用于将路径拆分成目录和文件名
print(os.path.split(os.path.join(path, item)))
# ('d:\\ZHIBOCODE\\test1', 'test1.txt')

# os.path.splitext() 用于将文件名拆分成文件名和扩展名
print(os.path.splitext(os.path.join(path, item)))
# ('test1', '.txt')

# 文件大小
size = os.path.getsize(os.path.join(path, item))
print(size)

#绝对路径
print(os.path.abspath(os.path.join(path, item)))
# d:\\ZHIBOCODE\\test1\\test1.txt

 

2.json模块

  JSON 是前后端 / 程序间最通用的数据格式。它有两种形态:JSON 字符串(带引号的文本)和 JSON 对象(Python 里就是字典)。核心两个函数:

  • json.loads(字符串):反序列化,把 JSON 字符串解析成 Python 字典
  • json.dumps(字典):序列化,把 Python 字典变回 JSON 字符串
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# json模块
import json

# json是一种表示数据的格式
# json的2种表现形式:
# 1. json字符串
# 2. json对象(字典)

# json解析(json反序列化)
# 字符串 -> json对象(字典)
s = '{"name":"邓超","age":18}'
d = json.loads(s)
print(d)
print(type(d))


# json序列化
# json对象(字典) -> 字符串
s2 = json.dumps(d)
print(s2)
print(s2,type(s2))

 

3.时间模块

  time.time() 返回时间戳(1970-01-01 00:00:00 到现在的秒数,浮点);time.sleep(n) 让程序暂停 n 秒。datetime 是对 time 的封装,更人性化:datetime(...) 直接构造日期时间对象,对象上有 .year/.month/... 属性;strftime(格式) 把对象转成字符串,strptime(字符串, 格式) 反向解析;timedelta(days=...) 表示时间差,可以直接和日期对象做加减。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
import time

# time模块
# time.time() 用于获取当前时间的秒数
print(time.time()) # 1694502400.0。从1970年1月1日0时0分0秒开始到当前时间的秒数

# time.sleep() 用于暂停程序执行
time.sleep(1) # 暂停1秒
print('hello world')
print("="*20)

# datetime模块
# 对time模块进行封装,提供了更方便的时间操作
# date:日期 表示年月日
# time:时间 表示时分秒
import datetime

#1 创建日期对象
# dt = datetime.datetime.now() # 2026-09-27 15:59:16.815036
dt = datetime.datetime(year=2023, month=10, day=10, hour=12, minute=30, second=0) # 2023-10-10 00:00:00
print(dt)
print("="*20)


# 2 日期的属性
print(dt.year) # 年 2023
print(dt.month) # 月 10
print(dt.day) # 日 10
print(dt.hour) # 时 12
print(dt.minute) # 分 30
print(dt.second) # 秒 0
print(dt.date()) # 2023-10-10
print(dt.time()) # 12:30:00
print("="*20)


# 3 日期的转换
# 日期对象:datetime对象
# 日期字符串:“2023-10-10 12:30:00”
# 时间戳:1694502400.0

# 日期对象转换为日期字符串
# strftime() 用于将日期对象转换为字符串格式
dfstr = dt.strftime('%Y-%m-%d %H:%M:%S')
print(type(dfstr)) # <class 'str'>
print(dfstr) # 2023-10-10 12:30:00
print("="*20)


# 日期字符串转换为日期对象
# datetime.strptime() 用于将字符串转换为日期对象
dt = datetime.datetime.strptime(dfstr, '%Y-%m-%d %H:%M:%S')
print(type(dt)) # <class 'datetime.datetime'>
print(dt) # 2023-10-10 12:30:00
print("="*20)


# 时间差 timedelta
# 求七天后的日期
d1 = datetime.timedelta(days=25)
addt = dt + d1
delt = dt - d1
print(dt) # <class 'datetime.datetime'>
print(addt) # 2023-10-17 12:30:00
print(delt) # 2023-09-24 12:30:00
print(delt.day) # 25
print(delt.day // 5) # 5

 

4.文件操作

  读写文件靠内置 open()。模式要分清:**r 只读(不存在报错)、w 清空写(不存在则新建)、a 追加写**(不存在则新建);带 b 的是二进制模式(图片、音视频)。read() 读全部、read(n) 读 n 个字符(第二次调用从上次位置继续)、readline() 读一行、readlines() 读全部成列表。最推荐 with open(...) as f: 写法——离开代码块自动 close(),不怕忘了关文件导致资源泄漏。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import os


# 1 文件操作


# 1.1 读取文件
# f = open("hello.txt", "r")
# r:只读read。如果文件不存在,会报错
# rb:二进制只读read binary。如果文件不存在,会报错
f = open("Python/Python_day11/hello.txt", "r", encoding="utf-8") # 不是二进制的文件,都需要指定编码方式
print(f.read()) # 读取文件所有内容
#print(f.read(10)) # 读取文件前10个字符
#print(f.read(10)) # 继续往后读取10个字符

# print(f.readline()) # 一次读取文件第一行
# print(f.readline()) # 一次读取文件第二行
# print(f.readline()) # 一次读取文件第三行
# print(f.readline()) # 一次读取文件第四行
# print(f.readline()) # 一次读取文件第五行

# print(f.readlines()) # 一次读取文件所有行
f.close()
print("="*20)


# 1.2 写入文件
# w:清空写write。如果文件不存在,会创建新文件
# wb:二进制只写write binary。如果文件不存在,会创建新文件
# a:追加写append。如果文件不存在,会创建新文件
# ab:二进制追加append binary。如果文件不存在,会创建新文件
f = open("Python/Python_day11/hello.txt", "w", encoding="utf-8") # 不是二进制的文件,都需要指定编码方式
f.write("你好,空指针") # 写入文件
print("="*20)
f.close()




# 关闭文件
# with-as :会自动关闭文件
with open("Python/Python_day11/hello.txt", "r", encoding="utf-8") as f:
print(f.read())
print("="*20)

 

5.作业

  作业是把 Day10 的「包 / 模块」落进实战:自建一个 test 包,里面 sort.py 提供三个函数——sort1 降序(不改动原列表)、sort2 升序(不改动原列表)、find_index 返回指定元素所有下标组成的列表;再在另一个文件里 from test import sort 调用它们。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#1.自定义模块:
# a.建立一个包:test
# b.在包的下创建一个排序的模块 sort.py
# 模块下的功能
# 对列表进行降序排序(不修改原列表)def sort1(l) -> list:
# 对列表进行升序排序(不修改原列表):def sort2(l) -> list:
# def find_index(l, n) -> list:
# 获取列表中所有与指定元素重复的元素下标,并返回这些下标所组成的列表

# c.在另外一个文件中 aa.py导入上述包中的模块sort.py,完成模块中功能的调用
from test import sort

l = [1, 3, 2, 4, 5]
print(sort.sort1(l))
print(sort.sort2(l))
print(sort.find_index(l, 2))

智泊Python--Day11
https://one-null-pointer.github.io/2026/07/30/智泊Python--Day11/
Author
liaoyue
Posted on
July 30, 2026
传送口