Python常用系统模块和文件操作
1. time模块
时间戳 用指定时间到1970年1月1日0时0分0秒(格林威治时间)的时间差(单位是秒)来表示时间的方式就是时间戳
注:格林威治时间和北京时间有8小时的时差
4个字节(时间戳存储时间)
1) time.time() - 获取当前时间
print(time.time())
2) time.localtime - 获取当前时间的本地时间,返回结构体时间
? time.localtime(时间戳) - 将时间戳对应的时间转换成本地时间
t1 = time.localtime()
print(t1.tm_year,t1.tm_mon,t1.tm_mday)
print(time.localtime(1627611769.17706))
3) time.strftime(时间格式,结构时间) - 结构体时间转字符串时间
"""
%Y - 年
%m - 月
%d - 日
%H - 时(24小时制)
%I - 时(12小时制)
%M - 分
%S - 秒
%p - AM、PM(上午、下午)
%a - 星期英文单词缩写
%A - 星期英文单词全拼
%b - 月份英文单词缩写
%B - 月份英文单词全拼
"""
result = time.strftime('%Y年%m月%d日 %H:%M:%S', t1)
print(result)
4) 将字符串时间转换成结构体时间
-
time.strptime(字符串时间, 时间格式) t2 = time.strptime('2021-05-1', '%Y-%m-%d')
print(f'周{t2.tm_wday+1}')
print(t2)
5) 将结构体时间转换成时间戳
6)time.sleep(时间) - 程序休眠指定时间,单位秒
time.sleep(2)
print('=======')
2. datetime模块
1)创建datetime时间对象
? datetime(年, 月, 日, hour=0, minute=0, second=0)
from datetime import datetime, timedelta
t1 = datetime(2020,5,20)
print(t1)
2)获取时间属性
? 时间对象.year、时间对象.month、…
print(t1.year)
3)获取当前时间
t2 = datetime.now()
print(t2)
4)将datetime转换成结构体时间
t4 = t3.timetuple()
print(t4)
5)将datetime转换成字符串时间
st5 = t3.strftime('%Y年%m月%d日')
print(st5)
6)将字符串时间转换成datetime
str6 = '2003-7-1'
t5 = datetime.strptime(str6, '%Y-%m-%d')
print(t5)
t6 = datetime.now() + timedelta(days=45)
print(t6)
t7 = datetime.now() + timedelta(days=23, hours=34, minutes=23)
print(t7)
3. hashlib模块
hashlib模块 - 用于生成数据的hash摘要
hash加密算法主要是有**:md5** 和 shaxxx
3.1 hash加密的特点:
a.不可逆(通过原数据加密后(产生的摘要)无法还原) b.相同的数据通过相同的算法产生摘要(密文)是一样的 c.不同大小的数据在使用相同的算法产生的摘要的长度一致
3.2 使用hashlib产生数据的摘要
①根据算法创建hash对象
? hashlib.算法名()
hash = hashlib.md5()
②添加数据
? hash对象.update(二进制数据)
pw = '12345'
hash1.update(pw.encode())
③获取摘要
result = hash1.hexdigest()
print(result)
3.3 python二进制数据类型 - bytes
字符串和bytes的相互转换 1)str -> bytes 方法一:bytes(字符串, ‘utf-8’)
print(bytes('abc', 'utf-8'))
方法二:b’字符集’
b1 = b'abc'
print(type(b1))
方法三:字符串.encode()
str1 = 'sds'
print(str1.encode())
2)bytes -> str 方法一:str(二进制数据, ‘utf-8’)
print(str(b1, 'utf-8'))
方法二:二进制数据.decode()
print(b1.decode())
4. 文件操作
4.1 数据的存储
程序中保存的数据默认都是存储在运行内存中,运行内存中的数据在程序结束的时候都会被释放。 如果希望程序运行过程中产生的数据在程序结束后不被销毁,就需要将数据存储到磁盘中。
- 将数据存储到磁盘过程叫做数据持久化、数据本地化。
- 数据持久化的基本原理 - 将数据通过文件存储到磁盘中。
4.2 文件操作(操作文件内容)
文件操作主要解决两个问题: a.怎么将程序中的数据通过文件存储到磁盘中 b.怎么在程序中使用在文件中的数据
4.3 文件操作基本步骤
第一步:打开文件 open(文件路径, 读写模式, encoding=文件编码方式) - 以指定方式打开指定文件,返回文件对象 1)文件路径 - 文件在计算机中的位置信息,以字符串的形式提供值。 a. 绝对路径:文件在计算机中的全路径 b. 相对路径:. - 表示当前目录 **… ** - 表示当前目录的上层目录
open(r'D:\QFcode\files\test1.py')
open(r'files\test1.py')
2)读写模式 - 设置打开文件后支持的是读操作还是写操作;设置操作数据的类型是字符串还是二进制
"""
第一组值:
r - 只读
w - 只写;先清空原文件
a - 只写;保留原文件内容,在后面追加数据
第二组值:
t - 数据类型是字符串
b - 数据类型是bytes
'r' == 'rt' == 'tr'
"""
f = open('test.py', 'a', encoding='utf-8' )
注意:如果是文本文件可以用t或者b的方式打开,如果是二进制文件只能以b的方式打开
3)encoding - 文件编码方式(打开的编码方式和文件的编码方式必须一致) 以b的方式打开文件时encoding不能赋值
第二步:读文件、写文件 1)读操作
- 文件对象.read() - 从读写位置开始读到文件结尾(读写位置默认在文件开头)
- 文件对象.readline() - 从读写位置开始读到一行的结尾(只有在读文本文件的时候有效)
- 文件对象.readlines() - 一行一行的读,读完
2)写操作
3)补充 - 设置读写位置到文件开头
f.seek(0)
print(f.readline())
第三步:关闭文件
5. 数据持久化操作
- 第一步:确定需要持久化的数据(确定哪个数据在下一次运行程序的时候还要用)
- 第二步:创建文件保存数据初始值
- 第三步:在程序中需要这个数据的时候从文件中读数据
- 第四步:如果数据发生改变,要将最新的数据写回文件中
"""
请输入学生姓名: 小明
小明 ['小明']
请输入学生姓名:小花
小明 小花 ['小明', '小花']
请输入学生姓名:q
(程序结束)
请输入学生姓名: 张三
小明 小花 张三 ['小明', '小花', '张三']
请输入学生姓名: 李四
小明 小花 张三 李四 ['小明', '小花', '张三', '李四']
请输入学生姓名:q
(程序结束)
"""
while True:
if str == 'q':
print('程序结束')
break
name = input('请输入学生姓名:')
stu = open('files/students.txt','a',encoding='utf-8')
stu.write(f'{name} ')
stu = open('files/students.txt','r',encoding='utf-8')
print(stu.read())
stu.close()
while True:
if str == 'q':
print('程序结束')
break
name = input('请输入学生姓名:')
stu = open('files/students2.txt', encoding='utf-8')
all_student = eval(stu.read())
all_student.append(name)
print(all_student)
stu = open('files/students2.txt','w',encoding='utf-8')
stu.write(f'{all_student} ')
stu.close()
分享:
import sys
def select():
op_num = (input('请选择1~3:'))
if op_num == '1':
login()
elif op_num == '2':
register()
elif op_num == '3':
print('退出!')
sys.exit()
def login():
account = input('请输入账号:')
password = input('请输入密码:')
user = open('files/user.txt', 'r', encoding='utf-8')
all_user = eval(user.read())
if account not in [name['account'] for name in all_user]:
print('账号输入错误,请注册或者忘记密码!')
index_ui()
elif account in [name['account'] for name in all_user] and password in [pw['password'] for pw in all_user]:
print('登录成功!')
index_ui()
else:
print('登录失败,密码输入错误!')
login()
def register():
account = input('请输入账号:')
password = input('请输入密码:')
user = open('files/user.txt', 'r', encoding='utf-8')
all_user = eval(user.read())
if account not in [name['account'] for name in all_user]:
all_user.append({'account': account, 'password': password})
user = open('files/user.txt', 'w', encoding='utf-8')
user.write(f'{all_user}')
print('注册成功!')
index_ui()
else:
print('注册失败,该账号已经注册过!')
index_ui()
def index_ui():
print("===============================")
print(' **欢迎来到xx管理系统** ')
print()
print(' 1.登 录 ')
print(' 2.注 册 ')
print(' 3.退 出 ')
print()
print("===============================")
select()
index_ui()
|