标签:空字符串 file ascii表 nop dig 表格 文件名 with 删除文件夹
与时间处理有关的python内置模块
时间戳:自1970-01-01 00.00:00到当前时间,按秒计算,到现在为止一共多少秒
import time # 导入时间模块包
import time
print(time.time()) # 获取当前时间的时间戳
‘‘‘
1573887905.6273756
‘‘‘
?
print(time.localtime()) # 获取当地时间格式化对象,即struct.time(为九个元素的元组)
‘‘‘
time.struct_time(tm_year=2019, tm_mon=11, tm_mday=16, tm_hour=15,tm_min=5, tm_sec=5, tm_wday=5, tm_yday=320, tm_isdst=0)
‘‘‘
?
?
res = time.localtime()
print(res.tm_hour)
print(res.tm_mday)
# 可以将时间元素返回出来
15
16
?
print(time.gmtime())
# ,将一个时间转化为UTC时区(0时区)的struct.time,# 即获取格林威治时间格式化对象
‘‘‘
time.struct_time(tm_year=2019, tm_mon=11, tm_mday=16, tm_hour=7, \
tm_min=5, tm_sec=5, tm_wday=5, tm_yday=320, tm_isdst=0)
?
‘‘‘
# print(time.strftime())
# strftime()可以把一个代表的时间的元组或struct_time转化为格式化的时间字符串,若t未指定,则以当前时间为参数
#格式参考下方官方指定
print(time.strftime(‘%Y-%m-%d %H:%M:%S‘))
?
# 2019-11-16 15:34:30
?
print(time.strftime(‘%Y-%m-%d %X‘))
# %H:%M:%S = %X
# 2019-11-16 15:34:30
?
"""
%Y Year with century as a decimal number.
%m Month as a decimal number [01,12].
%d Day of the month as a decimal number [01,31].
%H Hour (24-hour clock) as a decimal number [00,23].
%M Minute as a decimal number [00,59].
%S Second as a decimal number [00,61].
%z Time zone offset from UTC.
%a Locale‘s abbreviated weekday name.
%A Locale‘s full weekday name.
%b Locale‘s abbreviated month name.
%B Locale‘s full month name.
%c Locale‘s appropriate date and time representation.
%I Hour (12-hour clock) as a decimal number [01,12].
%p Locale‘s equivalent of either AM or PM.
?
"""
?
print(time.strptime(‘2018-10-05 11:10:10‘,‘%Y-%m-%d %H:%M:%S‘))
# 把一个格式化的时间转化成格式化时间对象(struct_time)
# strptime和strftime是互逆操作
?
# time.struct_time(tm_year=2018, tm_mon=10, tm_mday=5, \
# tm_hour=11, tm_min=10, tm_sec=10, tm_wday=4, tm_yday=278, tm_isdst=-1)
?
?
?
# time.sleep(‘参数‘)
# 里面的参数指的是秒,可以将程序延长到参数所指定的时间后再执行
?
?
print(time.asctime())
# 将一个时间的元组或者或者struct_time表示为下面这种形式,不传参数则默认为当前时间
‘‘‘
Sat Nov 16 15:14:11 2019
‘‘‘
?
?
print(time.ctime())
print(time.ctime(1573887905.6273756))
# 将时间戳改为下面这种形式,不传参则默认为当前时间戳
‘‘‘
Sat Nov 16 15:18:05 2019
Sat Nov 16 15:05:05 2019
‘‘‘
?
和时间有关的python内置模块
import datetime
?
?
print(datetime.date.today()) # 获取当前日期
# 2019-11-16
?
print(datetime.datetime.today()) # 获取当前日期时间 (北京时间)
?
# 2019-11-16 16:16:35.420231
?
print(datetime.datetime.now()) # 获取当前日期时间,和上面的方法没有多少区别
?
# 2019-11-16 16:16:35.420231
?
?
print(datetime.datetime.utcnow()) # 格林威治时间
?
# 2019-11-16 08:16:35.420231
?
res = datetime.datetime.today()
print(res.hour) # 可以提取时
# 16
print(res.year) # 可以提取年
# 2019
print(res.month) # 可以提取月
?
?
‘‘‘
日期/时间的计算 (*******)
日期时间 = 日期时间 “+” or “-” 时间对象
时间对象 = 日期时间 “+” or “-” 日期时间
‘‘‘
?
# 当前时间
current_time = datetime.datetime.now()
print(current_time)
?
# 2019-11-16 16:48:58.950441
?
# 时间对象
# 一段时间间隔后的时间
datetime_obj = datetime.timedelta(days = 3)
print(datetime_obj)
?
# 3 days, 0:00:00
?
# 获取当前时间3天后的时间
# 日期时间 = 当前时间 “+” or “-” 时间对象
late_time = current_time + datetime_obj
?
print(late_time)
?
# 2019-11-19 16:48:58.950441
?
# 时间对象 = 日期时间 - 当前时间
?
datetime_obj = late_time - current_time
print(datetime_obj)
?
# 3 days, 0:00:00
随机数模块
import random
?
print(random.randrange(1,10)) # 返回一个1到10内的随机数,但是取不到10
?
print(random.randint(1,10)) # 返回一个1到10内的随机数,可以取到10
?
print(random.randrange(0,10,2)) # 返回一个0到10内的随机偶数,后面的2表示步长
?
print(random.random()) # 随机返回一个1以内的浮点数
?
l1 = [1, 2, 3, 4, 5, 6]
?
random.shuffle(l1) # 将原序列打乱顺序重新随机排列,又叫洗牌
?
print(l1)
?
?
l2 = [2,4,5,7,9,] # 在给定序列中随机抽一个字符,集合和字典不能随机选取
# l3 = {1,2,3,4,5}
# l4 = {‘a‘:1,‘b‘:2,‘c‘:3}
l5 = (1,2,3,4,5)
print(random.choice(l2))
# print(random.choice(l3))
# print(random.choice(l4))
print(random.choice(l5))
?
?
l = random.sample(‘jsdiand‘,3) # 从给定的字符串组中随机抽取特定数量的字符,并返回列表
?
print(l)
?
?
?
# 可以做一个简单的验证码
n = 0
l1 = ‘‘
while n < 5 :
a = ‘123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ‘
s = random.sample(a,1) # 从a中随机选出一个值,返回的是列表
for i in s: # 将字符串取出来
l1 += i # 拼接字符串
n += 1
random.shuffle(list(l1)) # 再洗一次牌
print(l1)
?
?
?
b = ‘123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ‘
c = random.sample(b, 10)
for i in c:
print(i)
?
?
‘‘‘
需求:
大小写字母、数字组合而成
组合5位数的随机验证码
?
前置技术:
random.randint(1,10) # 在1到10中随机选出一个数
- chr(97) # 可以将ASCII表中值转换成对应的字符
# print(chr(101))
- random.choice
‘‘‘
?
?
# 获取任意长度的随机验证码
def get_code(n):
code = ‘‘
# 每次循环只从大小写字母、数字中取出一个字符
# for line in range(5):
for line in range(n):
?
# 随机获取一个小写字母
res1 = random.randint(97, 122)
lower_str = chr(res1) #
?
# 随机获取一个大写字母
res2 = random.randint(65, 90)
upper_str = chr(res2)
?
# 随机获取一个数字
number = str(random.randint(0, 9))
?
code_list = [lower_str, upper_str, number]
?
random_code = random.choice(code_list)
?
code += random_code
?
return code
?
#
code = get_code(5)
print(code)
print(len(code))
os是与操作系统交互的模块
import os
?
DAY15_PATH = os.path.dirname(__file__)
# # 默认获取此文件的上一层目录的绝对路径
print(DAY15_PATH)
?
‘‘‘
输出结果:G:/python/day15
‘‘‘
?
# 项目的根目录,路径相关的值都用 “常量”
BASE_PATH = os.path.dirname(‘G:\python\day15\时间模块.py‘)
BASE_PATH1 = os.path.dirname(‘G:\python\day15‘)
print(BASE_PATH) # 返回上一级根目录
print(BASE_PATH1)
?
?
‘‘‘输出结果
G:/python/day15
G:\python\day15 # 正反斜杠没有影响
G:\python
‘‘‘
?
?
# 路径的拼接
DAY15_PATH = os.path.dirname(__file__)
print(os.path.join(‘G:\python\day15‘,‘python之从入门到放弃.txt‘))
print(os.path.join(DAY15_PATH,‘python之从入门到放弃.txt‘))
?
‘‘‘
# 输出结果:
# G:\python\day15\python之从入门到放弃.txt
# G:/python/day15\python之从入门到放弃.txt
‘‘‘
?
?
?
# 通过路径判断文件/文件夹是否存在,存在返回True,不存在返回False
?
print(os.path.exists(‘G:\python\day15\python之从入门到放弃.txt‘))
print(os.path.exists(‘G:\python\day15\python之从入门.txt‘))
?
‘‘‘
# True
# False
‘‘‘
# 判断“文件夹”是否存在,存在返回True,不存在返回False
print(os.path.isdir(‘G:\python\day15‘)) # True
?
?
#创建文件夹
DAY_15 = os.path.dirname(__file__)
DIR_PATH = os.path.join(DAY_15, ‘python练习册‘)
os.mkdir(DIR_PATH) # 创建文件夹
?
# 删除文件夹: 只能删除 “空的文件夹”
os.rmdir("G:\python\day15\python练习册")
?
?
# 获取某个文件夹中所有文件的名字
teacher_list = os.listdir(r‘G:\python\day15‘)
print(teacher_list) # 返回的是列表格式
?
# enumerate(可迭代对象) ---> 得到一个对象,对象有一个个的元组(索引, 元素)
res = enumerate(teacher_list)
print(res) # 得到的是一个对象 <enumerate object at 0x0000023DA0ED0C78>
?
print(list(res)) # 将对象改成元组并标有序号
# [(0, ‘datetime时间模块.py‘), (1, ‘os模块.py‘), (2, ‘python之从入门到放弃.txt‘), \
# (3, ‘python练习册‘), (4, ‘random模块.py‘), (5, ‘sys模块.py‘), \
# (6, ‘__init__.py‘), (7, ‘时间模块.py‘), (8, ‘验证15.py‘)]
?
举例:1让用护从文件夹中选择文件并打开
# 让用户选择文件
while True:
?
# 获取某个文件夹中所有文件的名字
teacher_list = os.listdir(r‘G:\python\day15‘)
# 1.打印所有老师的作品
for index, name in enumerate(teacher_list): # 解压赋值
print(f‘编号: {index} 文件名: {name}‘)
?
choice = input(‘请选择想看的老师作品-->(头条影片: Jason写真) 编号:‘).strip()
?
# 2.限制用户必须输入数字,数字的范围必须在编号内
# 若不是数字,则重新选择
if not choice.isdigit():
print(‘必须输入数字‘)
continue
?
# 若是数字,往下走判断是否在编号范围内
choice = int(choice)
?
# 判断如果不在列表范围内,则重新选择
if choice not in range(len(teacher_list)):
print(‘编号范围错误!‘)
continue
?
file_name = teacher_list[choice]
?
teacher_path = os.path.join(
r‘G:\python\day15\老男孩老师们的写真集‘, file_name)
?
print(teacher_path)
?
with open(teacher_path, ‘r‘, encoding=‘utf-8‘) as f:
print(f.read())
?
?
?
?
举例2
import os # 导入os模块
while True:
# 找到这个文件夹(电影大全)
DATE_PATH = os.path.dirname(os.path.dirname(__file__)) # 需要往上找两次才能在同一根目录下
DATE_AIM_PATH = os.path.join(DATE_PATH, ‘电影大全‘)
# 获取电影大全文件夹中的所有名字
movie_list = os.listdir(DATE_AIM_PATH) # 获得文件下的电影列表
for index,name in enumerate(movie_list): # 解压赋值
print(f"编号:{index},电影名:{name}") # 打印出来编号和文件名
choice = input(‘请选择想要观看的电影编号:‘).strip()
if not choice.isdigit():
print("必须写入数字") # 判断输入的是否是数字
continue
choice = int(choice) # 将输入的字符串数字改为整型
if choice not in range(len(movie_list)): # 判断数字是否在编号范围内
print("没有此电影")
continue
file_name = movie_list[choice] # 索引到此文件名
movie_path = os.path.join(DATE_AIM_PATH,file_name) # 拼接文件路径
print(movie_path) # 打印文件路径
with open(movie_path,‘r‘,encoding=‘utf-8‘)as f: # 读取文件内容
print(f.read())
?
sys模块是和python解释器交互的模块
import sys
import os
?
# 获取当前的Python解释器的环境变量路径
# print(sys.path)
?
# 将当前项目添加到环境变量中
BASE_PATH = os.path.dirname(os.path.dirname(__file__))
sys.path.append(BASE_PATH)
?
# 获取cmd终端的命令行 python3 py文件 用户名 密码
print(sys.argv) # 返回的是列表[‘‘]
hashlib模块内置有很多算法,可以用来加密字符
import hashlib
‘‘‘
hashlib模块是一种加密模块,模块里面包含了很多算法
比如MD5,sha256等
其中我们常用的是MD5算法,因为其不可解的特性被广泛用于密码验证等
?
?
摘要算法:
- 摘要是从某个内容中获取的加密字符串
- 摘要一样,内容就一定一样: 保证唯一性
?
- 密文密码就是一个摘要
?
?
‘‘‘
# md5_obj = hashlib.md5()
# print(type(md5_obj))
?
# 输出结果:<class ‘_hashlib.HASH‘>
?
# md5_obj = hashlib.md5
# print(type(md5_obj))
# 输出结果 <class ‘builtin_function_or_method‘>
#
?
?
md5_obj = hashlib.md5()
str_1 = ‘1234‘
# update中一定要传入bytes类型
md5_obj.update(str_1.encode(‘utf-8‘)) # 产生了一个内存地址
# 得到一个加密的字符串
res = md5_obj.hexdigest() # 此时加密的是str_1字符串
print(res)
# # 输出结果:81dc9bdb52d04dc20036dbd8313ed055
?
# str_1 = ‘1234‘
# hashlib.md5().update(str_1.encode(‘utf-8‘)) # 产生了一个内存地址
# print(hashlib.md5().hexdigest()) # 再次调用再次产了一个内存地址,所以没有引用到str_1,加密的是个空字符串
#
# 输出结果:d41d8cd98f00b204e9800998ecf8427e
?
print(hashlib.md5().hexdigest()) # 加密的一个空字符串
?
# 输出结果:d41d8cd98f00b204e9800998ecf8427e
?
‘‘‘
虽然md5几乎不会不破解,但是可以通过撞库的方式破解真实密码
为了防止撞库,我们可以通过‘加盐‘的方式来解决
‘‘‘
def pwd_md5(pwd): #
md5_obj = hashlib.md5()
# print(type(md5_obj))
str1 = pwd # ‘1234‘
# update中一定要传入bytes类型数据
md5_obj.update(str1.encode(‘utf-8‘))
?
# 创造盐
sal = ‘密码不可破解‘
# 加盐
md5_obj.update(sal.encode(‘utf-8‘))
?
# 得到一个加密后的字符串
res = md5_obj.hexdigest()
?
return res
?
?
# 模拟用户登陆操作
?
# 获取文件中的用户名与密码
with open(‘user.txt‘, ‘r‘, encoding=‘utf-8‘) as f:
user_str = f.read()
?
file_user, file_pwd = user_str.split(‘:‘)
?
# 用户输入用户名与密码
username = input(‘请输入用户名:‘).strip()
password = input(‘请输入密码:‘).strip() # 1234
?
# 校验用户名与密码是否一致
if username == file_user and file_pwd == pwd_md5(password): # pwd_md5(‘1234‘)
print(‘登陆成功‘)
else:
print(‘登陆失败‘)
?
python内几种常用内置模块的介绍,包括time模块,datetime模块,random模块,os模块,sys模块,hashlib模块
标签:空字符串 file ascii表 nop dig 表格 文件名 with 删除文件夹
原文地址:https://www.cnblogs.com/jiangxianseng/p/11879098.html