Day014 - 常用系统模块
作者:互联网
os模块常用函数
os.getcwd() - 获取当前工作目录
os.listdir(文件夹路径) - 获取指定文件夹所有文件的名称
os.path.abspath(’./’) - 获取指定相对路径的绝对路径
import os
print(os.getcwd())
print(os.listdir('./'))
print(os.path.abspath('./'))
time模块
时间戳
- 指定时间到1970-01-01 00:00:00(格林威治时间)的时间差(单位:秒)来表示时间的方式就是时间戳。
time.time()
- 获取当前时间(世界协调时)
print(time.time()) # 获取当前时间,返回值为时间戳
time.localtime()
- 获取当前时间的本地时间,返回时间戳
time.localtime(时间戳)
- 将时间戳对应的时间转换成本地时间,返回结构体时间
print(time.localtime())
print(time.localtime(1627612746.222818))
# time.struct_time(tm_year=2021, tm_mon=7, tm_mday=30, tm_hour=10, tm_min=39, tm_sec=6, tm_wday=4, tm_yday=211, tm_isdst=0)
time.sleep()
- 程序休眠指定时间,单位秒
time.sleep(0)
time.strftime()
- 结构体时间转换成字符串时间
%Y | %m | %d | %H | %I | %M | %S |
---|---|---|---|---|---|---|
年 | 月 | 日 | 时(24制式) | 时(12制式) | 分 | 秒 |
t1 = time.localtime()
result = time.strftime('%z %Y-%m-%d %H:%M:%S', t1)
print(result) # +0800 2021-07-30 11:06:08
time.strptime(字符串时间, 时间格式)
- 将字符串时间转换成结构体时间
t2 = '2020-10-20'
result = time.strptime(t2, '%Y-%m-%d')
print(f'周{result.tm_wday + 1}') # 周2
将字符串时间转换成时间戳(先将字符串时间转换成结构体时间)
result = time.mktime(t1)
print(result)
datetime模块
datetime.datetime类
- 处理包含年月日时分秒的时间
创建datetime时间对象
- datetime(year, month, day, hour=0, minute=0, second=0)
t1 = datetime.datetime(2018, 10, 10, 14, 23, 45)
print(t1) # 2018-10-10 14:23:45
获取时间属性
- 时间对象.属性
print(t1.year, t1.minute) # 2018 23
获取当前时间
t2 = datetime.datetime.now()
print(t2) # 2021-07-30 11:37:39.852374
将时间对象转换成结构体时间
t3 = t2.timetuple()
print(t3) # time.struct_time(tm_year=2021, tm_mon=7, tm_mday=30, tm_hour=11, tm_min=40, tm_sec=8, tm_wday=4, tm_yday=211, tm_isdst=-1)
将时间对象转换成字符串时间
t4 = t2.strftime('%Y-%m-%d %H:%M:%S')
print(t4, type(t4)) # 2021-07-30 11:42:31 <class 'str'>
将字符串时间转换成时间对象
t5 = datetime.datetime.strptime(t4, '%Y-%m-%d %H:%M:%S')
print(t5, type(t5)) # 2021-07-30 11:47:59 <class 'datetime.datetime'>
datetime.timedelta类
- 主要用于时间的加减操作
t1 = '2020-01-01 00:00:00'
t2 = datetime.datetime.strptime(t1, '%Y-%m-%d %H:%M:%S')
print(t2, type(t2)) # 2020-01-01 00:00:00 <class 'datetime.datetime'>
t3 = t2 + datetime.timedelta(days=10) # 增加10天
print(t3) # 2020-01-11 00:00:00
t4 = t3 + datetime.timedelta(weeks=1) # 增加一周时间
print(t4) # 2020-01-18 00:00:00
hashlib
-
用于生成数据的hash摘要
-
hash加密算法主要有:md5 和 shaxx
-
hash加密的特点:
- 不可逆(通过源数据加密后(产生的摘要)无法还原);
- 相同的数据通过相同的算法产生的摘要(密文)是一样的;
- 不同大小的数据在使用相同的算法产生的摘要的长度一致;
使用hashlib产生数据对象
- 根据算法创建hash对象
# hashlib.算法名()
hash1 = hashlib.md5()
- 添加数据
# hash对象.update(二进制数据)
pw = '123456'
hash1.update(pw.encode())
- 获取摘要
result = hash1.hexdigest()
print(result) # e10adc3949ba59abbe56e057f20f883e
hash2 = hashlib.sha256()
ssh = '123456'
hash2.update(ssh.encode())
result = hash2.hexdigest()
print(result)
Python二进制数据类型 - bytes
字符串和bytes相互转换
- str -> bytes
- bytes(‘字符串’,‘utf-8’)
- b’字符集’
- 字符串.encode()
# 字符串转二进制
print(bytes('abc', 'utf-8')) # b'abc'
b1 = b'abc'
print(b1, type(b1)) # b'abc' <class 'bytes'>
- bytes -> str
- str(二进制数据,‘utf-8’)
- 二进制数据.decode()
# 二进制转字符串
print(str(b1, 'utf-8')) # abc
print(b1.decode()) # abc
文件操作
数据存储
- 程序中保存的数据默认都是存储在运行内存中,运行内存中的数据在程序结束后都会被释放;
- 如果希望程序运行过程中产生的数据在程序结束后不被销毁,就需要将数据存储在磁盘中;
- 将数据存储到磁盘的郭程程叫数据持久化(或者叫数据本地化)
- 基本原理 - 将数据通过文件存储到磁盘中
文件操作(文件内容的读写)
- 将程序中的数据通过文件存储到磁盘中
- 怎么在程序中使用保存在文件中的数据
文件操作基本步骤
打开文件
-
open(文件路径, 读写模式, encoding=文件编码方式) - 以指定方式打开指定文件,创建文件对象
-
文件路径
-
文件在计算机中的位置信息,以字符串的形式提供值;
-
绝对路径:文件在计算机里的全路径;
-
相对路径:. 表示当前代码文件的目录
… 表示当前目录的上层目录
-
-
读写模式
-
设置打开文件后支持的是读操作还是写操作,以及设置操作数据类型(是字符串还是二进制)
-
第一组值:r(read) - 只读
w(write) - 只写,先清空源文件;
a(append) - 只写,保留源文件,在后面追加;
-
第二组值:t - 数据类型是字符串(t可以省略)
b - 数据类型是bytes
-
-
encoding
- 文件编码方式,默认为utf-8;一般只要求打开的编码方式与文件本身编码方式一致;
- 式与文件本身编码方式一致;
-
# 参数1:路径
licenses = open(r'D:\StudyExperience\Python Data Analysis\01语言基础\Day14 - 常用系统模块\licenses.txt')
licenses = open('./licenses.txt')
licenses = open('../Day14 - 常用系统模块/licenses.txt')
# 参数2:读写模式
# r - 只读
licenses = open('./licenses.txt', 'r')
licenses.read()
# licenses.write('abc') # io.UnsupportedOperation: not writable
# w - 只写;会清空
licenses = open('./licenses.txt', 'w')
licenses.write('abc')
# licenses.read() # io.UnsupportedOperation: not readable
# a - 只写;保留源文件并追加
licenses = open('./licenses.txt', 'a')
# licenses.read() # io.UnsupportedOperation: not readable
licenses.write('abc')
# t - 读写数据的类型是字符串
licenses = open('./licenses.txt', 'rt')
result = licenses.read()
print(type(result)) # <class 'str'>
# b - 读写数据的类型是二进制
licenses = open('./licenses.txt', 'rb')
result = licenses.read()
print(type(result)) # <class 'bytes'>
licenses = open('./licenses.txt', 'ab')
# licenses.write('abc') # TypeError: a bytes-like object is required, not 'str'
licenses.write(b'abc')
读写文件
文件对象.read()
- 文件对象.read() - 从读写位置开始读到文件结尾(读写位置默认在文件开头)
- 文件对象.seek() - 设置读写位置到文件开头
- 文件对象.readline() - 读取从光标位置开始的第一行内容,如果没有内容会返回空串;
- 文件对象.readlines() - 读取文件的每一行,返回一个由每行构成元素的列表;
文件对象.write()
- 文件对象.write() - 写文件,从哪开始写和打开文件的方式有关;
关闭文件
文件对象.close()
数据持久化
数据持久化的基本步骤
- 确定需要持久化的数据(确定哪个数据在下一次运行程序需要使用);
- 创建文件保存数据初始值;
- 在程序中需要这个数据的时候从文件里读取;
- 如果数据发生改变,要将最新的数据写回文件;
# 写一个程序,打印程序运行次数
conf = open('./file/config.txt', 'rt', encoding='utf-8')
count = int(conf.read())
count += 1
print(count)
conf = open('./file/config.txt', 'w', encoding='utf-8')
conf.write(str(count))
# 练习:添加学生,并且在添加文成后显示所有学生信息(只需要学生姓名)
while True:
stu = open('./file/stu.txt', 'rt', encoding='utf-8')
num = str(stu.read())
print(num)
in_put = input('请输入姓名:')
if in_put == 'q':
break
stu = open('./file/stu.txt', 'at', encoding='utf-8')
stu.write(f' {in_put}')
# 在上题的基础上将学生姓名打印成列表
while True:
in_put = input('请输入姓名:')
if in_put == 'q':
break
stu = open('./file/stu.txt', encoding='utf-8')
num = eval(stu.read())
num.append(in_put)
print(num)
stu = open('./file/stu.txt', 'w', encoding='utf-8')
stu.write(str(num))
标签:文件,常用,datetime,licenses,tm,模块,time,print,Day014 来源: https://blog.csdn.net/qq_20814305/article/details/119257059