模块基础
定义模块
基本概念
- 模块是从逻辑上组织python代码的形式
- 当代码量变得相当大的时候,最好把代码分成一些有组织的代码段,前提是保证它们的 彼此交互
- 这些代码片段相互间有一定的联系,可能是一个包含数据成员和方法的类,也可能是一组相关但彼此独立的操作函数
- 人话:一个 .py文件 就是一个python模块
导入模块 (import)
- 使用 import 导入模块
- 模块属性通过 “模块名.属性” 的方式调用
- 模块函数通过 “模块名.函数名” 的方式调用
- 如果仅需要模块中的某些属性,也可以单独导入
常用的导入模块的方法
- 一行指导入一个模块,可以导入多行, 例如:import random
- 也可一行导入多个模块,例如:import random, sys
- 只导入模块中的某些方法,例如:from random import choice, randint
判断是否是自己调用,显示不同结果:
练习:
- 编写一个能生成 8 位随机密码的程序
- 使用 random 的 choice 函数随机取出字符(大小写字母数字)
- 改进程序,用户可以自己决定生成多少位的密码
>>> import string
>>> string.
string.Formatter( string.ascii_uppercase string.octdigits
string.Template( string.capwords( string.printable
string.ascii_letters string.digits string.punctuation
string.ascii_lowercase string.hexdigits string.whitespace
>>> string.ascii_letters
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
>>> string.digits
'0123456789'
>>>
# 编写一个能生成 8 位随机密码的程序
# 使用 random 的 choice 函数随机取出字符(大小写字母数字)
# 改进程序,用户可以自己决定生成多少位的密码
import random
#all_str = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
from string import ascii_letters,digits
def randpwd(n = 8):
all_str = ascii_letters + digits
#print(all_str)
chars = ''
#n = int(input('请输入要生成几位数密码:'))
for i in range(n):
chars = random.choice(all_str) + chars
return chars
if __name__ == '__main__':
print(randpwd())
print(randpwd(4))
时间模块
time 模块
时间表示方式
- 时间戳 timestamp:表示的是从 1970 年1月1日 00:00:00 开始按秒计算的偏移量
- UTC(Coordinated Universal Time, 世界协调时)亦即格林威治天文时间,世界标准时间。在中国为 UTC+8 DST(Daylight Saving Time) 即夏令时;
- 结构化时间(struct_time): 由 9 个元素组成
time 模块主要方法
1. time.sleep(t)
time 模块最常用的方法之一,用来睡眠或者暂停程序t秒,t可以是浮点数或整数。
#时间模块
import time
#自定义模块、自建模块、系统模块(核心模块)、第三方模块
def banzhuan():
print('开始。。。')
#time.sleep() 暂停程序的运行
time.sleep(3)
print('结束。。。')
banzhuan()
2. time.time()
返回当前系统时间戳。时间戳可以做算术运算。
import time
#自定义模块、自建模块、系统模块(核心模块)、第三方模块
def banzhuan():
print('开始。。。')
#time.sleep() 暂停程序的运行
time.sleep(3)
print('结束。。。')
#获取当前时间的时间戳
start = time.time()
banzhuan()
end = time.time()
print('程序执行耗时:',end - start)
将一个时间戳转为当前时区的结构化时间
#time.localtime() 将一个时间戳转为当前时区的结构化时间
#没有添加时间戳,默认当前时间的时间戳
#time.struct_time(tm_year=2023, tm_mon=11, tm_mday=2, tm_hour=15, tm_min=27, tm_sec=42, tm_wday=3, tm_yday=306, tm_isdst=0)
t1 = time.localtime()
print(t1)
print('年:',t1[0],t1.tm_year)
print('月:',t1[1],t1.tm_mon)
print('日:',t1[2],t1.tm_mday)
#切片
print(t1[:3])
将一个时间戳转为UTC时区的结构化时间
#time.gmtime() 将一个时间戳转为UTC时区的结构化时间
t2 = time.gmtime()
print(t2)
print(t2[0],t2[1],t2[2])
结构化时间转为时间戳
#结构化时间转为时间戳
t3 = time.mktime(time.localtime())
print(t3)
格式化时间
#格式化时间
#xxxx-xx-xx xx:xx:xx
t4 = time.strftime('%Y-%m-%d %H:%M:%S')
print(t4)
将格式化时间转化为结构化时间:
#将格式化时间转化为结构化时间
t7 = time.strptime('2023-11-2','%Y-%m-%d')
print(t7)
t5 = time.strptime('2023-11-2 15:47:30','%Y-%m-%d %H:%M:%S')
print(t5)
t6 = time.strptime('2023年11月2日 15时47分30秒','%Y年%m月%d日 %H时%M分%S秒')
print(t6)
print(t6 > t7)
时间格式之间的转换
Python的三种类型时间格式,可以互相进行转换
练习:取出指定时间段的日志
需求
-
有一日志文件,按时间先后顺序记录日志
-
给定 时间范围,取出该范围内的日志
-
自定义日志文件 myweb.log
编写日志文件
[root@localhost ~]# vim /opt/myweb.log
2030-01-02 08:01:43 aaaaaaaaaaaaaaaaa
2030-01-02 08:34:23 bbbbbbbbbbbbbbbbbbbb
2030-01-02 09:23:12 ccccccccccccccccccccc
2030-01-02 10:56:13 ddddddddddddddddddddddddddd
2030-01-02 11:38:19 eeeeeeeeeeeeeeee
2030-01-02 12:02:28 ffffffffffffffff
编写python文件
#读取日志文件/opt/myweb.log中9:00~11:00之间的记录
#1、按照行的方式读取文件
#2、从每一行中截取日期时间部分,转化为结构化时间
#3、判断是否在9~11点之间的,获取之间的记录
import time
t2 = time.strptime('2030-01-02 09:00:00', '%Y-%m-%d %H:%M:%S')
t3 = time.strptime('2030-01-02 11:00:00', '%Y-%m-%d %H:%M:%S')
#以只读的方式打开文件
with open('/opt/myweb.log',mode='r') as fo:
#读取行
lines = fo.readlines()
#print(lines)
#遍历列表
for line in lines:
#print(line)
#截取日期时间部分
time_str = line[:19]
#print(time_str)
t = time.strptime(time_str, '%Y-%m-%d %H:%M:%S')
#print(t)
#比较是否在9~11点之间
if t2 <= t <= t3:
print(time_str)
python 语法风格和模块布局
变量赋值
#a = 1
#b = 1
#链式赋值
#a = b = 1
# a,b = 1,2
# c,d = 'he' # c = 'h',d = 'e'
# e,f = [100,200]
# print(a,b)
# print(c,d)
# print(e,f)
#两者共享同一个列表
# red = blue = [80,100]
# red.append(90)
# blue.append(70)
# print(red,blue)
#交换两个变量的值
# a=1
# b=2
# a,b = b,a
# print(a,b)
合法标识符
- Python 标识符,字符串规则和其他大部分用 C 编写的高级语言相似
- 第一个字符必须是 字母或下划线 _
- 剩下的字符可以是字母和数字或下划线
- 大小写敏感
关键字
- 和其他的高级语言一样,python 也拥有一些被称作关键字的保留字符
- 任何语言的关键字应该保持相对的稳定,但是因为 python 是一门不断成长和进化的语言,其关键字偶尔会更新
- 关键字列表和 iskeyword() 函数都放入了 keyword 模块以便查阅
案例:查看,判断python中的关键字
关键字列表:
字符串
格式化详解
- 百分号:可以使用格式化符号来表示特定含义
- f 字符串:是 Python3.6 之后加入的标准库
name = '张三'
age = '18'
gender = '男'
print('姓名:' + name + '年龄:' + age + ' 性别:' + gender)
#%s
print('姓名:%s 年龄:%s 性别:%s' % (name,age,gender))
# f
print(f'姓名:{name} 年龄:{age} 性别:{gender}')
字符串函数
#demo05_str.py
s1 = 'hello world'
# 是否以某个字符串开头
print(s1.startswith('he'))
# 是否以某个字符串结尾
print(s1.endswith('world'))
s2 = 'python'
s3 = 'PYTHON'
print(s2.islower()) #判断字符串是否为小写
print(s3.isupper())#判断字符串是否为大写
s4 = ' 羽绒 服 '
print(s4)
print(s4.lstrip())#去除左侧的空白空格
print(s4.rstrip())#去除右侧空白字符
print(s4.strip())#去除两端的空白字符
#去除所有的空白字符
def del_space(s):
new_str=''
for item in s:
if item != ' ':
new_str += item
return new_str
print(del_space(' 笔 记本 电脑'))
name = '内马尔.达.希尔达.桑托斯.乳尼奥而'
# 切割字符串
nlist = name.split('.')
print(nlist)
print(nlist[0],nlist[-1])
filename = 'demo.tar.gz' # redis.conf
print(filename.split('.')[-1])
alist = ['tom','tomas','king']
#列表拼接为字符串
print('.'.join(alist))
print('-'.join(alist))
print(''.join(alist))