python语法之常用内置模块

一、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')


posted @ 2019-11-16 18:50  小猪皮蛋  阅读(218)  评论(0编辑  收藏  举报