day14常用模块总结

1.常用系统模块

1.1 os模块

import os

1.1.1 os.getcwd() - 获取当前工作目录

1.1.2 os.listdir(文件夹路径) - 获取指定文件夹所有文件名称

1.1.3 os.path.abspath(文件夹路径) - 返回指定文件的绝对路径

1.2 time模块

import time

1.2.1 time.time() - 获取当前时间

print(time.time())  ## 1627611752.606797 以时间戳显示

时间戳 - 用指定时间到1970年1月1日0时0分0秒(格林威治时间)的时间差来表示时间的方式(秒)

格林威治时间和北京时间有8小时时差 - 现在格林威治时间比北京时间晚8小时

1.2.2 time.localtime() - 获取当前时间的本地时间

1.2.3 time.localtime(时间戳) - 将时间戳对应的时间转换成本地时间

print(time.localtime())
print(time.localtime(1627611752.606797))

1.2.3 time.sleep(时间) - 程序休眠指定时间(秒)

1.2.4 time.strftime(时间格式,结构体时间) - 结构体时间转字符串时间

XXXX年XX月XX日 xx:xx:xx
%Y - 年
%m - 月
%d - 日
%H - 时(24小时制)
%I - 时(12小时制)
%M - 分
%S - 秒
%p - AM、PM(上午、下午)
%a - 星期英文单词缩写
%A - 星期英文单词全拼
%b - 月份英文缩写
%B - 月份英文全拼
t1 = time.localtime()
result = time.strftime('%Y年%m月%d日 %H:%M:%S', t1)
print(result)  # 2021年07月30日 10:54:35

result = time.strftime('%Y-%m-%d %H:%M:%S', t1)
print(result)

result = time.strftime('%m月%d日 %p%I:%M %B', t1)
print(result)

1.2.5将字符串时间转换成结构体时间

time.strptime(字符串时间,时间格式)

t3 = time.strptime('2010-10-2', '%Y-%m-%d')
print(f'周{t3.tm_wday + 1}')
print(t3)

1.2.6将字符串时间转换成时间戳(先将字符串时间转换成结构体时间)

time.mktime(结构体时间) - 将结构体时间转换成时间戳

result = time.mktime(t3)
print(result)

1.3datetime类型 - 处理包含年月日时分秒的时间

# 1)创建datatime时间对象
import datetime
from datetime import datetime, timedelta

# datetime(year, month, day, hour=0, minute=0, second=0)
t1 = datetime(2010, 10, 2)
print(t1)  # 2010-10-02 00:00:00

t2 = datetime(2011, 9, 4, 11, 13, 40)
print(t2)  # 2011-09-04 11:13:40

# 2)获取时间属性
# 时间对象.year、时间对象.moth、...
print(t2.month)  # 9
print(t2.hour)  # 11

# 3)获取当前时间
t3 = datetime.now()
print(t3)

# 4)将datetime转换成结构体时间
t4 = t3.timetuple()
print(t4)

# 5)将datetime转换成字符串时间
st5 = t3.strftime('%Y年%m月%d日 %a')
print(st5)

# 6)将字符串时间转换成datetime
str6 = '2003-7-1'
t5 = datetime.strptime(str6, '%Y-%m-%d')

# 2.timedelta - 主要用于时间的加减操作
t6 = t5 + timedelta(days=45)
print(t6)  # 2003-08-15 00:00:00

t7 = t5 - timedelta(days=8)
print(t7)  # 2003-06-23 00:00:00

t8 = t5 + timedelta(days=1, hours=5, minutes=15)
print(t8)  # 2003-07-02 05:15:00

1.4 hashlib模块 - 用于生成数据的hash摘要

hash 加密算法主要有:md5 和 shaxxx
1. hash加密的特点
a.不可逆(通过原数据加密后无法还原)
b.相同的数据通过相同的算法产生的摘要(密文)是一样的
c.不同大小的数据在使用相同的算法产生的摘要的长度一致

1.4.1使用hashlib产生数据的摘要

import hashlib
## 1.根据算法创建hash对象 - hashlib.算法名()
hash1 = hashlib.md5()

## 2.添加数据
## hash对象.update(二进制数据)

pw = '123456'
hash1.update(pw.encode())

## 3.获取摘要
result = hash1.hexdigest()
print(result)

python二进制数据类型 - bytes

字符串和bytes的相互转换
1)str -> bytes
方法1:bytes(字符串,'utf-8')
方法2:b'字符集'
方法3:字符串.encode()

2)bytes -> str
方法1:str(二进制数据,'utf-8')
方法2:二进制数据.decode()
print(bytes('abc','utf-8'))

b1 = b'abc'
print(type(b1))

str1 = 'abc'
print(str1.encode())

print(str(b1,'utf-8'))
print(b1.decode())

2.文件操作

2.1数据的存储

程序中保存的数据默认都是存储在运行内存中,运行内存中的数据在程序结束之后会被释放
保存数据需要将数据存储到磁盘中
将数据存储到磁盘的过程又叫数据本地化
数据本地化的基本原理 - 将数据通过文件存储到磁盘中

2.2操作文件内容

文件操作主要解决两个问题:
a.怎么将程序中的数据通过文件存储到磁盘中
b.怎么在程序中使用保存在文件中的数据

2.2.1 文件操作的基本步骤

第一步:打开文件
open(文件路径,读写模式,编码方式encoding=文件编码方式)
1.文件路径 - 文件在计算机中的位置信息,以字符串的方式提供值(绝对路径,相对路径)
绝对路径 - 文件在计算机中的全路径
相对路径 - ./(当前目录) 当前项目所在目录 
2.读写模式 - 设置打开文件之后是读操作还是写操作,设置操作数据的类型是字符串还是二进制
"""
r - 只读  w - 只写(覆盖原有文件) a - 只写(对数据追加)
t - 按字符串数据类型操作(t可以省略)  b - 按二进制数据类型操作
"""
3.encoding - 文件编码方式 以b的方式打开文件的时候encoding不赋值
注意:二进制文件只能以b的方式打开
第二步:文件操作
文件对象.read()  - 从读写位置开始到文件结尾(默认为文件开头)
文件对象.readline() - 从读写位置开始读到一行的结尾(只有文本文件有效)
文件对象.readlines() - 以列表形式返回一个对象,每个元素是一行数据
文件对象.write(数据) - 
第三步:文件关闭
文件对象.close()
f = open(r'E:\\qianfeng1.txt','r+',encoding='utf-8')
print(f.read())

f.seek(0) - 设置读写位置到文件开头

数据持久化的基本步骤:

第一步:确定需要持久化的数据(确定哪个数据在下一次程序运行的时候还要用)
第二步:创建文件保存数据初始值
第三步:在程序中需要这个数据的时候从文件中读数据
第四步:如果数据发生改变,要将最新的数据写回文件中

练习1:打印程序运行次数

f = open(r'E:\shujuchijiu\aa.txt','r',encoding='utf-8')
count = int(f.read())
count+=1
print(count)
f = open(r'E:\shujuchijiu\aa.txt','w',encoding='utf-8')
f.write(str(count))
f.close()

练习2:添加学生,并且在添加完成后显示所有学生信息(只需要学生名字)

请输入学生姓名: 小明
小明   ['小明']

请输入学生姓名:小花
小明 小花   ['小明', '小花']

请输入学生姓名:q
(程序结束)

请输入学生姓名: 张三
小明 小花 张三   ['小明', '小花', '张三']

请输入学生姓名: 李四
小明 小花 张三 李四    ['小明', '小花', '张三', '李四'] 

请输入学生姓名:q
(程序结束)
while True:
    name = input("请输入学生姓名:")
    if name == 'q':
        exit()
    else:
        f = open(r'E:\shujuchijiu\bb.txt', 'r', encoding='utf-8')
        all_student = eval(f.read())
        all_student.append(name)
        print(all_student)
        f = open(r'E:\shujuchijiu\bb.txt', 'w', encoding='utf-8')
        f.write(str(all_student))
        f.close()

作业

控制台登陆注册操作

def login_info():
    print('='*50)
    print(' '*2 ,'** ','欢迎来到X管理系统',' **')
    print()
    print()
    print(" " * 10, '1.登陆')
    print(" " * 10, '2.注册')
    print(" " * 10, '3.退出')
    print("=" * 50)
    xuanze()

def xuanze():
	global f1
    global f2
    a = int(input("请选择1-3:"))
    if a == 1:
        login1()
    elif a == 2:
        zhuce1()
    elif a == 3:
        f1.close()
        f2.close()
        print("结束退出")
        exit()
    else:
        print("输入有误将返回")
        login_info()

f1 = open(r'E:\shujuchijiu\zhanghao.txt', 'r', encoding='utf-8')
all_zhanghao = eval(f1.read())
f2 = open(r'E:\shujuchijiu\mima.txt', 'r', encoding='utf-8')
all_mima = eval(f2.read())


def zhuce1():
    global all_zhanghao
    global all_mima
    zhanghao = input("请输入账号(3-6位):")
    if not 3 <= len(zhanghao) <=6:
        print("用户名格式错误")
        zhuce1()
    mima = input("请输入密码(6-12位)")
    if not 6 <= len(mima) <=12:
        print("密码格式错误")
        zhuce1()
    if zhanghao in all_zhanghao:
        print("注册失败,该账号已经注册过!")
        login_info()
    else:
        all_zhanghao.append(zhanghao)
        all_mima.append(mima)
        f1 = open(r'E:\shujuchijiu\zhanghao.txt', 'w', encoding='utf-8')
        f1.write(str(all_zhanghao))
        f2 = open(r'E:\shujuchijiu\mima.txt', 'w', encoding='utf-8')
        f2.write(str(all_mima))
        print("注册成功")
        login_info()


def login1():
    global all_zhanghao
    global all_mima
    zhanghao = input("请输入账号:")
    mima = input("请输入密码:")
    if zhanghao not in all_zhanghao:
        print("该账号未注册")
        login_info()
    elif mima not in all_mima:
        print("登陆失败,密码错误")
        login_info()
    else:
        if mima != all_mima[all_zhanghao.index(zhanghao)]:
            print("登陆失败,密码错误")
            login_info()
        else:
            print("登陆成功")
            login_info()

login_info()
上一篇:Java基础面试每日3题:day14


下一篇:从零开始学Java-Day14