python-day04 模块基础、时间模块、python语法风格和模块布局、字符串

模块基础

定义模块

基本概念

  • 模块是从逻辑上组织python代码的形式
  • 当代码量变得相当大的时候,最好把代码分成一些有组织的代码段,前提是保证它们的 彼此交互
  • 这些代码片段相互间有一定的联系,可能是一个包含数据成员和方法的类,也可能是一组相关但彼此独立的操作函数
  • 人话:一个 .py文件 就是一个python模块

导入模块 (import)

  • 使用 import 导入模块
  • 模块属性通过 “模块名.属性” 的方式调用
  • 模块函数通过 “模块名.函数名” 的方式调用
  • 如果仅需要模块中的某些属性,也可以单独导入

常用的导入模块的方法

  • 一行指导入一个模块,可以导入多行, 例如:import random
  • 也可一行导入多个模块,例如:import random, sys
  • 只导入模块中的某些方法,例如:from random import choice, randint

判断是否是自己调用,显示不同结果:

 

练习:

  1. 编写一个能生成 8 位随机密码的程序
  2. 使用 random 的 choice 函数随机取出字符(大小写字母数字)
  3. 改进程序,用户可以自己决定生成多少位的密码
>>> 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的三种类型时间格式,可以互相进行转换

练习:取出指定时间段的日志

需求

  1. 有一日志文件,按时间先后顺序记录日志

  2. 给定 时间范围,取出该范围内的日志

  3. 自定义日志文件 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))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值