外观
常用模块
JSON
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,易于人阅读和编写。
首先需要导入json模块,使用json.dumps()来将数据转换为json格式,使用json.loads()将json数据转换为Python对象,使用json.dump()将python中的对象转化成json储存到文件中,使用json.load()将文件中的json的格式转化成python对象提取出来。
json.dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, encoding="utf-8", default=None, sort_keys=False, **kw)
参数解读:
obj:要转换的Python对象
sort_keys =True:是告诉编码器按照字典排序(a到z)输出。如果是字典类型的python对象,就把关键字按照字典排序
indent:参数根据数据格式缩进显示,读起来更加清晰
separators:是分隔符的意思,参数意思分别为不同dict项之间的分隔符和dict项内key和value之间的分隔符,把:和,后面的空格都除去了
skipkeys:默认值是False,如果dict的keys内的数据不是python的基本类型(str,unicode,int,long,float,bool,None),设置为False时,就会报TypeError的错误。此时设置成True,则会跳过这类key
ensure_ascii=True:默认输出ASCII码,如果把这个改成False,就可以输出中文。
例:
import json
dic = {'key%d' % i: 'value%d' % i for i in range(1, 6)}
json = json.dumps(dic)
print('字典格式:', dic)
print('json格式:', json)运行结果:
字典格式: {'key1': 'value1', 'key2': 'value2', 'key3': 'value3', 'key4': 'value4', 'key5': 'value5'}
json格式: {"key1": "value1", "key2": "value2", "key3": "value3", "key4": "value4", "key5": "value5"}json.dump(obj, fp, skipkeys=False, ensure_ascii=True, check_circular=True,allow_nan=True, cls=None, indent=None, separators=None,default=None, sort_keys=False, **kw)
参数相比dumps()多了一个fp,它表示保存的文件名。
loads(s, *, cls=None, object_hook=None, parse_float=None,parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)
参数解读:
s:源对象
object_pairs_hook参数是可选的,它会将结果以key-value有序列表的形式返回,形式如:[(k1, v1), (k2, v2), (k3, v3)],如果object_hook和object_pairs_hook同时指定的话优先返回object_pairs_hook
parse_float参数是可选的,它如果被指定的话,在解码json字符串的时候,符合float类型的字符串将被转为你所指定的,比如说你可以指定为decimal.Decimal
parse_int参数是可选的,它如果被指定的话,在解码json字符串的时候,符合int类型的字符串将被转为你所指定的,比如说你可以指定为float
- def load(fp, *, cls=None, object_hook=None, parse_float=None,parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)
和json.load()类似,这里不再赘述。
例:
import json
x = {'name': '你猜', 'age': 19, 'city': '四川'}
#用dumps将python编码成json字符串
x = json.dumps(x, ensure_ascii=False)
print('json格式:', x)
#用loads将json编码成python
print('json解码后:', json.loads(x))运行结果:
json格式: {"name": "你猜", "age": 19, "city": "四川"}
json解码后: {'name': '你猜', 'age': 19, 'city': '四川'}随机数
random 模块是 Python 中用于生成随机数的常用模块。让我们看一下它提供的几个常用方法:
random.random(): 返回一个 0 到 1 之间的随机浮点数。random.randint(a, b): 返回一个从a到b(包含端点值)的随机整数。random.randrange(a, b, s): 返回一个从a到b之间(不包含b)的随机整数,可以指定步长s。random.choice(s): 从一个序列s中随机返回一个元素,这个序列可以是字符串、元组或列表。random.shuffle(s): 随机排列序列s中的元素,这个序列必须是列表。
例:
import random
print('产生一个从0-1的随机浮点数: ', random.random())
print('产生一个从1-10的随机整数(包括1和10): ', random.randint(1, 10))
print('产生一个从1-9的随机整数,步长为2,不包括9: ', random.randrange(1, 9, 2))
list1 = ['a', 'b', 0, 1, []]
print('从已有列表里面随机选择一个元素: ', random.choice(list1))
random.shuffle(list1)
print('将列表的顺序打乱后列表的顺序是: ', list1)运行结果:
产生一个从0-1的随机浮点数: 0.07918614268014179
产生一个从1-10的随机整数(包括1和10): 2
产生一个从1-9的随机整数,步长为2,不包括9: 3
从已有列表里面随机选择一个元素: []
将列表的顺序打乱后列表的顺序是: [1, 0, [], 'b', 'a']datetime模块
date:日期类
常用属性:year/month/day
- 获取当前时间
import datetime
today = datetime.datetime.today()
today1 = datetime.datetime.now()结果:

- 日期对象的属性
import datetime
# 这两种都可以
today = datetime.datetime.today()
# today1 = datetime.datetime.now()
print("当前日期:", today) # 当前日期
print("当前日期(字符串):", today.ctime()) # 返回日期的字符串
print("时间元组信息:", today.timetuple()) # 当前日期的时间元组信息
print("年:", today.year) # 返回today对象的年份
print("月:", today.month) # 返回today对象的月份
print("日:", today.day) # 返回today对象的日
print("星期:", today.weekday()) # 0代表星期一,类推
print("公历序数:", today.toordinal()) # 返回公历日期的序数
print("年/周数/星期:", today.isocalendar()) # 返回一个元组:一年中的第几周,星期几结果:

- date类中时间和时间戳的转换:
(1)toordinal方法返回的公历序数转化为日期
import datetime
today = datetime.datetime.now()
# 此方法的返回类型是一个数字,它是该日期在公历中的序数。
num = today.toordinal()
print(num)
print(today.fromordinal(num))结果:

(2)time模块时间戳转化日期
import datetime
import time
nowtime = time.time()
print(nowtime)
nowdate = datetime.date.fromtimestamp(nowtime)
print(nowdate)结果:

(3)格式化时间,格式参照time模块中的strftime方法
import datetime
today = datetime.date.today()
print(today)
print(today.strftime("%Y.%m.%d"))
print(today.strftime("%Y:%m:%d"))
print(today.strftime("%Y.%m.%d %H:%M:%S"))结果:

- 修改日期使用replace方法
import datetime
# 当前日期
date1 = datetime.date.today()
print(date1)
# 指定日期
date2 = datetime.date(2022, 10, 7)
print(date2)
# 不带参数修改日期
date3 = date2.replace(2022, 10, 8)
print(date3)
# 带参数修改日期
date4 = date2.replace(month=12, day=9)
print(date4)结果:

time:时间类
常用属性:hour/minute/second/microsecond
time类生成time对象,包含hour、minute、second、microsecond属性
import datetime
# time对象
print(datetime.time)
# 格式化time
time1 = datetime.time(18, 30, 59, 59)
print(time1)
print(time1.hour)
print(time1.minute)
print(time1.second)
print(time1.microsecond) # 微秒结果:

datetime:日期时间类
datetime类包含date类和time类的全部信息
import datetime
print(datetime.datetime.today())
print(datetime.datetime.now())
print(datetime.datetime.utcnow()) # 返回当前UTC日期和时间的datetime对象
print(datetime.datetime.fromtimestamp(1670582201)) # 时间戳的datetime对象
print(datetime.datetime.fromordinal(738498))
print(datetime.datetime.strptime("2020-12-25", "%Y-%m-%d"))结果:

timedelta:时间间隔,即两个时间点之间的时间长度
timedelta对象表示的是一个时间段,即两个日期date或者日期时间datetime之间的差;支持参数:weeks、days、hours、minutes、seconds、milliseconds、microseconds
import datetime
day = datetime.date.today()
# 当前日期
print(day)
# 增加7天后日期
print(day+datetime.timedelta(days=7))
# 时间操作
now = datetime.datetime.now()
# 当前日期时间
print(now)
# 增加8小时
print(now+datetime.timedelta(hours=8))
# 增加30分钟
print(now+datetime.timedelta(minutes=30))
# 增加30秒钟
print(now+datetime.timedelta(seconds=30))
# 减去一星期
print(now-datetime.timedelta(weeks=1))结果:

时间模块
time.time()获取当前时间戳。时间戳: 现在的时间距1970年1月1日 0时0分0秒的毫秒值。秒的取值范围为0~61,考虑到闰一秒或闰两秒的情形。夏令时数字是布尔值,如果使用-1,表示未知的,那么使用mktime()可能得到正确的值。
Python中很多方法都将如下格式的元组作为时间参数:
time_uple = (2022, 1, 1, 0, 0, 0, 0, 0, 0,)
| 索引 | 属性 | 字段 | 值 |
|---|---|---|---|
| 0 | tm_year | 年 | 如2000,2022等 |
| 1 | tm_mon | 月 | 范围1-12 |
| 2 | tm_mday | 日 | 范围1-31 |
| 3 | tm_hour | 小时 | 范围0-23 |
| 4 | tm_min | 分钟 | 范围0-59 |
| 5 | tm_sec | 秒 | 0-61 (60-61 是闰秒) |
| 6 | tm_wday | 星期 | 范围0-6 (0表示周一) |
| 7 | tm_yday | 儒略日 | 1到366 |
| 8 | tm_isdst | 夏令时 | 0、1或-1 |
| N/A | tm_zone | 时区 | 时区名称的缩写 |
| N/A | tm_gmtoff | UTC东偏 | 以秒为单位 |
time.strftime()来格式化时间,参数1为字符串,它指定了时间的格式。
| 格式 | 描述 |
|---|---|
| %a | 本地化的缩写星期中每日的名称。 |
| %A | 本地化的星期中每日的完整名称。 |
| %b | 本地化的月缩写名称。 |
| %B | 本地化的月完整名称。 |
| %c | 本地化的适当日期和时间表示。 |
| %d | 十进制数 [01,31] 表示的月中日。 |
| %H | 十进制数 [00,23] 表示的小时(24小时制)。 |
| %I | 十进制数 [01,12] 表示的小时(12小时制)。 |
| %j | 十进制数 [001,366] 表示的年中日。 |
| %m | 十进制数 [01,12] 表示的月。 |
| %M | 十进制数 [00,59] 表示的分钟。 |
| %p | 本地化的 AM 或 PM 。 |
| %S | 十进制数 [00,61] 表示的秒。 |
| %U | 十进制数 [00,53] 表示的一年中的周数(星期日作为一周的第一天)。 在第一个星期日之前的新年中的所有日子都被认为是在第 0 周。 |
| %w | 十进制数 [0(星期日),6] 表示的周中日。 |
| %W | 十进制数 [00,53] 表示的一年中的周数(星期一作为一周的第一天)。 在第一个星期一之前的新年中的所有日子被认为是在第 0 周。 |
| %x | 本地化的适当日期表示。 |
| %X | 本地化的适当时间表示。 |
| %y | 十进制数 [00,99] 表示的没有世纪的年份。 |
| %Y | 十进制数表示的带世纪的年份。 |
| %z | 十进制带符号数[-1200,+1200]表示时区。 |
| %Z | 时区名称。 |
例:
# time模块的使用
import time
nowTimeMillis = time.time()
time_tuple = (2022, 1, 1, 0, 0, 0, 0, 0, 0,)
print(nowTimeMillis) # 若想把时间格式化 可用下面的方法 第一个参数是格式化的字符串 第二个是时间元组
print('格式化的时间:', time.strftime('%Y-%m-%d %H:%M:%S', time_tuple))运行结果:
1665753500.0550375
格式化的时间: 2022-01-01 00:00:00