Cheryl-D

一、time模块

时间模块

1、获取时间戳(*****)
print(time.time())   #1573871570.5133271  时间戳
time.sleep()

2、获取格式化时间(*****)
 获取年月日
print(time.strftime(\'%Y-%m-%d\'))   #2019-11-16
 获取年月日时分秒
print(time.strftime(\'%Y-%m-%d %H:%M:%S\'))   #2019-11-16 10:37:18
  %X == %H:%M:%S
print(time.strftime(\'%Y-%m-%d %X\'))   #2019-11-16 14:16:06

3、获取时间对象(*****)
print(time.localtime())
print(type(time.localtime()))  #<class \'time.struct_time\'>
time_obj = time.localtime()
print(time_obj.tm_year)  #2019   获取年
print(time_obj.tm_mon)  #11   获取月
print(time_obj.tm_mday)  #16   获取日

获取当前时间的格式化时间
print(time.strftime(\'%Y-%m-%d %X\',time.localtime()))  #2019-11-16 14:24:01

将时间对象转为格式化时间
res = time.localtime()   #res是时间对象
print(time.strftime(\'%Y-%m-%d %X\',res))  #2019-11-16 14:26:15

将字符串格式的时间转为时间对象
res = time.strptime(\'2019-11-16\',\'%Y-%m-%d\')
print(res)

 

 

二、datetime模块

获取当前年月日(*******)
print(datetime.date.today()) # 2019-11-16

# 获取当前年月日时分秒(*******)
print(datetime.datetime.today())  #2019-11-16 15:00:45.868785

time_obj = datetime.datetime.today()
print(type(time_obj))  #<class \'datetime.datetime\'>
print(time_obj.year)   #2019
print(time_obj.month)   #11
print(time_obj.day)    #16

# 从索引0开始计算周一
UTC
print(time_obj.weekday())  # 0-6
ISO
print(time_obj.isoweekday())  # 1-7

UTC时区(*******)
北京时间
print(datetime.datetime.now())     #2019-11-16 15:03:02.699611
格林威治
print(datetime.datetime.utcnow())  #2019-11-16 07:03:02.699611

 

 

三、random模块

随机模块

import random
## 默认获取0——1之间任意小数
print(random.random())


## 随机获取1—9中任意的整数
print(random.randint(1,9))


## 随机获取可迭代对象中的某一个值
list1 = [\'红桃A\', \'梅花A\', \'红桃Q\', \'方块K\']
res3 = random.choice(list1)
print(res3)


#洗牌
#将可迭代中的值进行乱序
list1 = [\'红桃A\', \'梅花A\', \'红桃Q\', \'方块K\']
random.shuffle(list1)
print(list1)

# 需求: 随机验证码
\'\'\'
需求: 
    大小写字母、数字组合而成
    组合5位数的随机验证码

前置技术:
    - chr(97)  # 可以将ASCII表中值转换成对应的字符
    # print(chr(101))
    - random.choice
\'\'\'

# 获取任意长度的随机验证码
def get_code(n):  #n是想要的组合长度
    code = \'\'
    #每次循环只从大写小字母、数字中取出一个字符
    for line in range(n):   #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
    #将code返回出去
    return code
code = get_code(5)
print(code)   #验证码组合结果M64G8
print(len(code))  #验证码长度

 

四、os与操作系统交互的模块

 

import os

#需求: 获取当前项目根目录

## 1、获取当前文件中的上一级目录

P_PATH = os.path.dirname(__file__)   #D:/python/Pythons/p

## 2、项目的根目录,路径相关的值都用 “常量”
BASE_PATH = os.path.dirname(P_PATH)  #D:/python/Pythons

## 3、路径的拼接: 拼接文件 “绝对路径”
TEST1_PATH = os.path.join(P_PATH, \'b.txt\')  # b.txt
TEST2_PATH = os.path.join(P_PATH, \'a.txt\')

## 4、判断“文件/文件夹”是否存在:若文件存在返回True,若不存在返回False
print(os.path.exists(TEST1_PATH))    #b.txt 存在,True
print(os.path.exists(TEST2_PATH))   #没有这个文件,False

# # 5、判断“文件夹”是否存在
print(os.path.isdir(TEST1_PATH))   #False
print(os.path.isdir(P_PATH))   #True

# # 5、创建文件夹
DIR_PATH = os.path.join(P_PATH,\'c.txt\')
os.mkdir(DIR_PATH)
#检查一下看看创建好没有
print(os.path.isdir(DIR_PATH))  #刚才创建成功 ,所以结果为True

## 6、删除文件夹: 只能删除 “空的文件夹”
os.rmdir(DIR_PATH)  #OSError: [WinError 145] 目录不是空的。: \'D:/python/Pythons/p\\c.txt\'

#示范:先创建一个新的,然后再删除
NEW_DIR_PATH = os.path.join(P_PATH,\'d.txt\')
# os.mkdir(NEW_DIR_PATH) #创建完成
os.rmdir(NEW_DIR_PATH)  # 删除成功,因为这是一个空文件夹


## 7、获取某个文件夹中所有文件的名字
file_list = os.listdir(r\'D:\python\Pythons\p\c.txt\')
print(file_list)  #[\'e.txt\', \'q.txt\', \'w.txt\']


# enumerate(可迭代对象) ---> 得到一个对象,对象有一个个的元组(索引, 元素)
res = enumerate(file_list)
print(list(res))  #[(0, \'e.txt\'), (1, \'q.txt\'), (2, \'w.txt\')]

 

 

五、sys模块

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)   # 返回的是列表[\'\']   [\'D:/python/Pythons/p/sys.py\']

 

六、hashlib模块

import hashlib

md5_obj = hashlib.md5()
# print(type(md5_obj))   #<class \'_hashlib.HASH\'>
str1 = \'1234\'
##update中一定要传入bytes类型数据
md5_obj.update(str1.encode(\'utf-8\'))

##得到一个加密后的字符串
res = md5_obj.hexdigest()
# print(res)   #81dc9bdb52d04dc20036dbd8313ed055

# 以上操作撞库有可能会破解真实密码

# 防止撞库问题: 加盐

import hashlib
def pwd_md5(pwd):
    md5_obj = hashlib.md5()
    str1 = 
    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(\'登录失败\')

 

七、json模块

json模块是一个序列化模块
json:

是一个第三方的特殊数据格式
可以将python数据类型————》json数据类型————》字符串————》文件中

其他语言要想使用python的数据:

文件中————》json数据类型————》字符串————》文件中
注意: 在json中,所以的字符串都是双引号

元祖比较特殊:
python中的元祖,若转成json,内部会将元祖————》列表

set 不能转成json类型

为什么使用json?
为了让不同语言之间数据共享。

如何使用
import json

json.dumps()
json.loads()
json.dump()
json.load()

import json
list = [\'目录\', \'上午\']

#序列化
json_str = json.dumps(list, ensure_ascii=False)
print(json_str)  #["目录", "上午"]  序列化的内容会变成双引号
print(type(json_str)) #<class \'str\'>
##反序列化
name = json.loads(json_str)
print(name)   #[\'目录\', \'上午\']
print(type(name)) #<class \'list\'>

#元祖
#序列化
tuple = (\'目录\', \'上午\')
json_t = json.dumps(tuple, ensure_ascii=False)
print(json_str)  #["目录", "上午"]

#反序列转化时会将元祖——》列表
print(json.loads(json_t))  #[\'目录\', \'上午\']

#字典
dict = {
    \'name\': \'aaa\',
    \'age\': 18
}
json_d = json.dumps(dict,ensure_ascii=False)
print(json_d)  #{"name": "aaa", "age": 18}
#反序列化
print(json.loads(json_d))  #{\'name\': \'aaa\', \'age\': 18}


#集合不能转成json数据
set = {\'a\', \'b\'}
set_json = json.dumps(set,ensure_ascii=False)
print(set_json)
TypeError: Object of type \'set\' is not JSON serializable


#序列化的数据保存到文件
with open(\'text.txt\',\'w\',encoding=\'utf-8\')as f:
    f.write(json.dumps(list, ensure_ascii=False))  #文件内容["目录", "上午"]
从文件打开序列化数据

#注册功能:
def register():
    u = input(\'用户名:\').strip()
    p = input(\'密码:\').strip()
    re_p = input(\'确认密码:\').strip()
    if p == re_p:
        user_dic = {
            \'name\': u,
            \'password\': p
        }
        json_str = json.dumps(user_dic, ensure_ascii=False)
        #开始写入文件
        #注意:保存json数据时,用.json作为文件后缀名
        with open(\'user.json\', \'w\', encoding=\'utf-8\')as f:
            f.write(json_str)
register()
#dump,load的用法
dic = {
    \'name\': \'b\',
    \'name1\': \'c\'
}
with open(\'user1.json\', \'w\', encoding=\'utf-8\')as f:
    json.dump(dic, f)  #{"name": "b", "name1": "c"}  省略f.write

#读出文件json数据
with open(\'user1.json\', \'r\', encoding=\'utf-8\')as f:
    user_str = json.load(f)  #省略f.read
    print(user_str)   #{\'name\': \'b\', \'name1\': \'c\'}

 

八、pickle模块

    pickle是一个python自带的序列化模块。

优点:
- 可以支持python中所有的数据类型
- 可以直接存 "bytes类型" 的数据,pickle存取速度更快

缺点: (致命的缺点)
- 只能支持python去使用,不能跨平台
import pickle
#写dump
set = {\'a\', \'b\', \'c\'}
# with open(\'pik.pickle\', \'wb\')as f:
#     pickle.dump(set, f)

#读 load
with open(\'pik.pickle\', \'rb\')as f:
    pyhton_set = pickle.load(f)
    print(pyhton_set)          #{\'a\', \'b\', \'c\'}
    print(type(pyhton_set))    #<class \'set\'>

 

九、collections模块

- python默认八大数据:
- 整型
- 浮点型
- 字符串
- 字典
- 元组
- 列表
- 集合
- 布尔
collections模块:
- 提供一些python八大数据类型 “以外的数据类型” 。


- 具名元组:
具名元组 只是一个名字。
应用场景:
- 坐标
-

from collections import namedtuple

- 有序字典:
- python中字典默认是无序

- collections中提供了有序的字典

from collections import OrderedDict


#具名元祖
from collections import namedtuple
#下面三种形式都可以
point = namedtuple(\'坐标\', [\'x\', \'y\'])   # 第二个参数既可以传可迭代对象
point1 = namedtuple(\'坐标\', (\'x\', \'y\'))
point2 = namedtuple(\'坐标\', \'x y\')
# # 会将 1 ---> x,   2 ---> y
# 传参的个数,要与namedtuple第二个参数的个数一一对应
# p = point(1, 3)  # 本质上传了4个,面向对象讲解
print(p)  #坐标(x=1, y=3)
print(type(p))  #<class \'__main__.坐标\'>

# 扑克牌:
# 获取扑克牌对象
card = namedtuple(\'扑克牌\', [\'color\', \'number\'])
red_a = card(\'红桃\', \'a\')
print(red_a)   #扑克牌(color=\'红桃\', number=\'a\')

#演员信息
p = namedtuple(\'max\', \'city age hobby\')
pp = p(\'china\', \'17\', \'read\')
print(pp)  #max(city=\'china\', age=\'17\', hobby=\'read\')

#有序字典
from collections import OrderedDict
oder_dic = OrderedDict({\'x\': 1, \'y\': 2, \'z\': 3})
print(oder_dic)     #OrderedDict([(\'x\', 1), (\'y\', 2), (\'z\', 3)])   变成有序的字典,里面是列表套元祖
print(type(oder_dic))  #<class \'collections.OrderedDict\'>
print(oder_dic[\'y\']) #2   取元素
print(oder_dic.get(\'y\')) #2   取元素

for line in oder_dic:
    print(line)  #x y z

 

十、openpyxl模块

openpyxl模块:第三方模块
- 可以对Excle表格进行操作的模块

- 下载:
pip3 install openpyxl

- Excel版本:
2003之前:
excle名字.xls

2003以后:
excle名字.xlsx

- 清华源: https://pypi.tuna.tsinghua.edu.cn/simple

- 配置永久第三方源:
D:\Python36\Lib\site-packages\pip\_internal\models\index.py

# 写入数据
# from openpyxl import Workbook
# # 获取Excel文件对象
# wb_obj = Workbook()
#
# wb1 = wb_obj.create_sheet(\'python工作表1\', 1)
# wb2 = wb_obj.create_sheet(\'python工作表2\', 2)
#
# # 修改工作表名字: 为python13期工作表1标题修改名字 ---》 tank大宝贝
# print(wb1.title)
# wb1.title = \'tank大宝贝\'
# print(wb1.title)

# 为第一张工作表添加值
# wb1[\'工作簿中的表格位置\']
# wb1[\'A10\'] = 200
# wb1[\'B10\'] = 1000
# wb1[\'C10\'] = \'=SUM(A10:B10)\'
#
#
# wb2[\'A1\'] = 100
#
# # 生成Excel表格
# wb_obj.save(\'python.xlsx\')
# print(\'excel表格生成成功\')


# 读取数据
# from openpyxl import load_workbook
# wb_obj = load_workbook(\'python.xlsx\')
# print(wb_obj)
#
# # wb_obj[\'表名\']
# wb1 = wb_obj[\'tank大宝贝\']
# print(wb1[\'A10\'].value)
# wb1[\'A10\'] = 20
# print(wb1[\'A10\'].value)




# 批量写入100条数据
from openpyxl import Workbook

wb_obj = Workbook()

wb1 = wb_obj.create_sheet(\'工作表1\')

# wb1[\'表格位置\'] = 对应的值
# n = 1
# for line in range(100):
#
#     wb1[\'A%s\' % n] = line + 1
#     n += 1

# 假设: 一万条数据的字典
dict1 = {
    \'name\': \'tank\',
    \'age\': 17
}

n = 1
init_val = 65
chr(65)  # 65-90
for key, value in dict1.items():
    wb1[\'A%s\' % n] = key
    wb1[\'B%s\' % n] = value
    n += 1

wb_obj.save(\'批量插入的数据2.xlsx\')


分类:

技术点:

相关文章:

  • 2022-02-08
  • 2022-01-26
  • 2022-02-08
  • 2022-12-23
  • 2021-09-22
猜你喜欢
  • 2022-12-23
  • 2022-02-08
  • 2022-02-08
  • 2022-02-08
  • 2022-12-23
  • 2021-12-21
  • 2022-02-08
相关资源
相似解决方案