首页 > 编程语言 >大数据学习记录,Python基础(5)

大数据学习记录,Python基础(5)

时间:2024-12-04 21:14:10浏览次数:8  
标签:__ name 记录 Python datetime 学习 print path os

模块 类与对象

模块

  • 内置模块 time, random, os, json
  • 第三方模块 requests, pandas, numpy,....
  • 自定义模块 xxx.py

常见的内置模块

hashlib 模块

该模块主要是进行数据加密的作用。

  • 常见的加密方式:sha256()【可逆】 md5()【不可逆】
import hashlib

info = '123456'

# 创建hashlib中的加密对象
md5_obj = hashlib.md5()
# 设置编码
md5_obj.update(info.encode('UTF-8'))
# 调用函数,开始加密
mi_wen = md5_obj.hexdigest()
print(f"明文:{info},通过md5加密后得到密文:{mi_wen}") # e10adc3949ba59abbe56e057f20f883e

一般情况下,在企业中,若想要对一个明文进行MD5加密的话,一般都不是直接进行加密,而是先对名进行加盐操作,之后才会进行md5加密。

import hashlib

info = '123456'

# 创建hashlib中的加密对象
md5_obj = hashlib.md5('shujia'.encode('UTF-8')) # 加盐操作
# 设置编码
md5_obj.update(info.encode('UTF-8'))
# 调用函数,开始加密
mi_wen = md5_obj.hexdigest()
print(f"明文:{info},通过md5加密后得到密文:{mi_wen}") # 0ead149c250ec554aff85fa083312a83

json模块

本质上是一个特殊格式的字符串,但是相比较于字符串而言,json是可以通过键获取值的。

判断一个字符串是否符合json的格式:

  • 看字符串是否是由双引号括起来,若不是,那么该字符串转不了json格式数据
  • 若值是由小括号括起来的多个元素,也是不能够转json格式数据的
序列化和反序列化
  • 序列化:将代码中的数据转化成网络中传输的数据流【python中的字典数据 --> json格式的字符串】
dict1 = {
    'name': '小黄',
    'age': 18,
    'likes': ['踢足球', '钓鱼', '打游戏'],
    'pets': [
        {'name': '小花', 'age': 2},
        {'name': '小黑', 'age': 3}]
}

s3 = json.dumps(dict1, ensure_ascii=False)
print(s3, type(s3))
  • 反序列化:将网络中传输的数据流还原成代码中的数据格式 【json格式的字符串 --> python中的字典数据】
s2 = '''
{"name":"小黄","age":18,"likes":["踢足球","钓鱼","打游戏"]}
'''
print(s2, type(s2))
# print(s2['age'])
res1 = json.loads(s2)
print(res1, type(res1)) # {'name': '小黄', 'age': 18, 'likes': ['踢足球', '钓鱼', '打游戏']} <class 'dict'>
print(res1['likes']) # ['踢足球', '钓鱼', '打游戏']

时间相关的模块

time
import time

res1 = time.time() # 得到的是一个时间戳格式的数据
print(res1, type(time)) # 2024-11-29 10:45:58

时间戳存储时占用的字节相比较于格式化后的字符串而言,是少很多的。

datetime

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

时间戳,datetime, 格式化日期字符串互相转换

# '2024年11月29日 10时51分00秒'
# datetime -> str 日期格式化
res1 = datetime.strftime(s1, '%Y-%m-%d %H:%M:%S')
print(res1)
print("-------------------------------")
# time.time()
# 时间戳 -> datetime
tp = time.time() # 当前的时间戳
print(tp)
res2 = datetime.fromtimestamp(tp)
print(res2, type(res2))
# datetime -> str
res3 = datetime.strftime(res2, '%Y/%m/%d %H:%M:%S')
print(res3, type(res3))
print("-------------------------------")
# 字符串 -> datetime
s2 = '2024/11/29 11:02:28'
d2 = datetime.strptime(s2, '%Y/%m/%d %H:%M:%S')
print(d2, type(d2))
# datetime-> 时间戳
tp2 = d2.timestamp()
print(int(tp2))

date还有一种方式可以时间获取年月日时分秒, 使用datetime对象中的属性

tp = 1732849348
dt1 = datetime.fromtimestamp(tp)
print(f"{dt1.year}年{dt1.month}月{dt1.day} {dt1.hour}时{dt1.minute}分{dt1.second}秒")

os模块

使用os模块中的功能操作文件或者文件夹

  • 判断目标是否存在
import os
# data/user_info
b = os.path.exists('E:\\projects\\PycharmProjects\\bigdata33\\base\\day07\\data\\user_info')
print(b) # True
  • 路径拼接
s1 = os.path.join('data','user_info1')
print(s1,type(s1))

if os.path.exists(s1):
    f = open(s1,'r',encoding='UTF-8')
    text1 = f.read()
    print(text1)
else:
    print("目标路径不存在!")
  • 获取当前文件所在的路径
ml1 = os.path.abspath(__file__) # __file__ 代表的是当前的文件
print(ml1, type(ml1)) # E:\projects\PycharmProjects\bigdata33\base\day07\os_demo.py
  • 获取某一个文件所处的父级目录路径
ml2 = os.path.dirname(ml1)
print(ml2,type(ml2)) # E:\projects\PycharmProjects\bigdata33\base\day07
  • 判断一个路径是否是文件
ml1 = os.path.abspath(__file__) # __file__ 代表的是当前的文件
print(ml1, type(ml1))

ml2 = os.path.dirname(ml1)
print(ml2,type(ml2))

print(os.path.isfile(ml1)) # True
print(os.path.isfile(ml2)) # False
  • 判断一个路径是否是文件夹
ml1 = os.path.abspath(__file__) # __file__ 代表的是当前的文件
print(ml1, type(ml1))

ml2 = os.path.dirname(ml1)
print(ml2,type(ml2))

print(os.path.isdir(ml1)) # False
print(os.path.isdir(ml2)) # True
  • 创建一个文件夹
lj1 = os.path.join('data','aaa')
os.mkdir(lj1)

注意:

  • 若要创建一个文件夹,使用os模块中的mkdir函数
  • 若要创建一个文件,使用open函数以写的方式打开
ml1 = os.path.abspath(__file__) # __file__ 代表的是当前的文件
ml2 = os.path.dirname(ml1)
res1 = os.walk(ml2)
'''
a1: 表示遍历到的文件夹的名称
b1: 表示遍历到的文件夹下所有的文件夹名称组成的列表
c1: 表示遍历到的文件夹下所有的文件名称组成的列表
'''
for a1,b1,c1 in res1:
    print(f"a1:{a1}")
    print(f"b1:{b1}")
    print(f"c1:{c1}")
    print("----------------------")
  • 删除路径

    • 若目标路径是一个文件
    lj1 = os.path.join('data','bbb')
    os.remove(lj1)
    
    • 若目标文件是一个文件夹
    lj1 = os.path.join('data','aaa')
    os.rmdir(lj1)
    
  • os模块练习

    • 练习1:企业中有一个网站,每一天都有新的用户注册,要求每一天需要使用一个新的文件存储当天注册的用户信息。
    import os.path
    import time
    import utils.login_tool as tool
    from datetime import datetime
    
    # 定义一个全局变量
    USERS_MU_LU = os.path.join('data','user_regs')
    
    
    def run():
        # 判断用户存储信息的文件父级目录是否存在,若不存在创建一个
        if not os.path.exists(USERS_MU_LU):
            os.mkdir(USERS_MU_LU)
    
        # 获取当天的时间
        # 1732776554 2024-11-28
        d = datetime.fromtimestamp(1732776554).strftime('%Y-%m-%d')
        file_name = os.path.join(USERS_MU_LU, d)
        if not os.path.exists(file_name):
            f = open(file_name,'w',encoding='UTF-8')
            f.close()
    
        print("欢迎注册".center(50,'-'))
        name = input("请输入您要注册的姓名: ")
        pwd = input("请输入新密码: ")
        pwd = tool.md5_pwd(pwd)
    
        with open(file_name,'a',encoding='UTF-8') as f:
            f.write(f"{name}|{pwd}\n")
            f.flush()
    
        time.sleep(3)
        print("用户注册成功!")
    
    
    
    if __name__ == '__main__':
        run()
    
    • 加入判断该用户是否在之前已经注册过?
    • 融合之前的登录注册案例。
    • 练习2:购票,一个用户购票的记录使用一个文件存储,判断这个用户是否是新用户;不仅可以订票,还可以查看历史记录。
    # 企业中有一个网站,每一天都有新的用户注册,要求每一天需要使用一个新的文件存储当天注册的用户信息。
    import os.path
    import time
    import utils.login_tool as tool
    from datetime import datetime
    
    # 定义一个全局变量
    USERS_MU_LU = os.path.join('data','user_regs')
    
    
    def run():
        # 判断用户存储信息的文件父级目录是否存在,若不存在创建一个
        if not os.path.exists(USERS_MU_LU):
            os.mkdir(USERS_MU_LU)
    
        # 获取当天的时间
        # 1732776554 2024-11-28
        d = datetime.fromtimestamp(1732776554).strftime('%Y-%m-%d')
        file_name = os.path.join(USERS_MU_LU, d)
        if not os.path.exists(file_name):
            f = open(file_name,'w',encoding='UTF-8')
            f.close()
    
        print("欢迎注册".center(50,'-'))
        name = input("请输入您要注册的姓名: ")
        pwd = input("请输入新密码: ")
        pwd = tool.md5_pwd(pwd)
    
        with open(file_name,'a',encoding='UTF-8') as f:
            f.write(f"{name}|{pwd}\n")
            f.flush()
    
        time.sleep(3)
        print("用户注册成功!")
    
    
    
    if __name__ == '__main__':
        run()
    

递归

概述:方法定义时,内部调用自身的一个现象

注意:递归要有一个出口,否则就是一个死递归

'''
从前有座山,山里有座庙,庙里有个老和尚,老和尚在给小和尚讲故事,讲的故事内容是:            故事1
    从前有座山,山里有座庙,庙里有个老和尚,老和尚在给小和尚讲故事,讲的故事内容是:        故事2
        从前有座山,山里有座庙,庙里有个老和尚,老和尚在给小和尚讲故事,讲的故事内容是:    故事3
            从前有座山,山里有座庙,庙里有个老和尚,老和尚在给小和尚讲故事,讲的故事内容是:故事4
                。。。


'''

例子

# 求5的阶乘  5! = 5*4*3*2*1
def jie_cheng(n):
    if n==1:
        return 1
    else:
        return n * jie_cheng(n-1)

res1 = jie_cheng(5)
print(res1)

异常

在python程序中出现不正常的情况

  • python中默认遇到异常的处理方案:抛出错误,程序停止,后续代码不会执行。

异常的分类

  • 语法错误(Syntax errors) 未运行之前出现的错误
    • 会在程序编写的过程中,出现了错误【例如pycharm会在错误的语法下出现红色下划线】
  • 异常(Exceptions)
    • 在程序运行过程中,出现了问题

异常的处理方案

  • try...except...语句
try:
    list1 = [1, 2, 3]
    print(list1[7])
except:
    print("出错啦!!!")

print("hello world")

try中的代码,若程序运行过程中出错,那么就会执行except中的语句体,若没有出错,except语句体不会执行。不管try中的代码有没有出错,整个python程序正常运行。

当try中的代码,若程序运行过程中出错,且try中还有其他的代码的时候,不会执行。

  • try...except...else语句
try:
    list1 = [1, 2, 3]
    print(list1[7])
    print("小黄真帅!")
except:
    print("出错啦!!!")
else:
    print("好好学习,天天向上!")

print("hello world")

只有当try中的代码不报错的时候,才会执行else中的代码

  • finally子句
try:
    list1 = [1, 2, 3]
    print(list1[1])
    print("小黄真帅!")
except:
    print("出错啦!!!")
else:
    print("好好学习,天天向上!")
finally:
    print("666")

print("hello world")

无论try中的代码是否报错,finally中的代码都会执行。

finally中一般情况下存放释放资源的代码逻辑

异常的使用场景

异常可以帮助我们替换一些复杂的判断场景

import random

list1 = ['小虎', '小张', '小黄', '小方', '小杨', '小于', '小查']
jiang_xiang = [
('一等奖', 1, 'mate70 pro'),
('二等奖', 1, '小米手环'),
('三等奖', 2, '按摩仪'),
('四等奖', 2, '京东购物卡')
]

def chou_jiang(l1):
    for i, num, goods in jiang_xiang:
        print(f"正在抽取{i}".center(50, '-'))
        name_list = random.sample(l1,num)
        # 将中奖名单从原名单中删除
        for n in name_list:
            if n in l1:
                l1.remove(n)
        info = f"恭喜{','.join(name_list)} 中得{i}!!!!"
        yield info



res1 = chou_jiang(list1)
try:
    for i in range(len(jiang_xiang)):
        input(f"开始抽{i+1}等奖....按下回车开始!")
        print(res1.__next__())
    print(res1.__next__())
except:
    print("所有奖项抽取完毕!!")

标签:__,name,记录,Python,datetime,学习,print,path,os
From: https://www.cnblogs.com/yinzhanpeng123/p/18587181

相关文章

  • python学习-condition
    条件判断1.三个关键词:ifelseelif(即为elseif)(1)if语句执行有个特点,它是从上往下判断,如果在某个判断上是True,把该判断对应的语句执行后,就忽略掉剩下的elif和else(2)当if后面的条件语句不满足时,与之相对应的else中的代码块将被执行。ifa==1:print('right')else:print('wro......
  • 大数据学习记录,Python基础(5)
    模块类与对象模块内置模块time,random,os,json第三方模块requests,pandas,numpy,…自定义模块xxx.py常见的内置模块hashlib模块该模块主要是进行数据加密的作用。常见的加密方式:sha256()【可逆】md5()【不可逆】importhashlibinfo='123456'#......
  • Python基础学习-14面向对象与类
    目录1、面向对象2、类3、基本语法和规范4、类的继承5、本节总结1、面向对象•对象:Object我们将生活中的业务场景抽象为对象类是对一类事物描述,是抽象的、概念上的定义:比如“人”对象是实际存在的该类事物的每个个体,因而也称实例(instance)。比如“张三”2、类......
  • python: Eclipse 2024‑03 R+pydev
    https://www.eclipse.org/downloads/packages/release/2024-03/r      ......
  • Day4 [Python学习] 注释
    1.为什么要写注释编写注释的主要目的是阐述代码要做什么,以及是如何做的。注释会被python解释器忽略,不用执行。在调试程序的过程中,注释还可以用来临时移除无用的代码。在开发项目期间,你对各个部分的内容很清楚,但过段时间后,有些细节你可能不记得了。注释的最大作用是提高程......
  • 技术框架中MyBatis参数传递的学习
    MyBatis参数传递总结MyBatis参数传递#{}方式情况一:Mapper映射器接口方法参数只有一个且为基本类型接口方法:publicList<UserEntity>selectUserByAge(intage);映射结果:<selectid="selectUserByAge"resultMap="userResultMap">select*fromtb_userwhereag......
  • Day3 [Python学习] 数据类型:数字;整型、浮点型、str()函数
    数学里边的数分为整数和小数,python语言中同样1.整型1.1赋值eg:建立一个名为age_a的变量,给它赋值1。此时控制台输出的1是整型,而不是字符串类型age_a=1print(age_a)1.2运算可对其执行加(+)减(-)乘(*)除(/)运算age_a=3age_b=27age_c=12age_d=40print(age_a......
  • 【python】数据库编程
    【python】数据库编程什么是数据库MySQL安装启动MySQL数据库pymysql库基础操作SQL语言基础示例Python作为一种多功能的编程语言,在数据库操作方面展现出了卓越的灵活性和强大的功能。无论你是初涉编程领域的数据爱好者,还是经验丰富的开发者寻求优化数据库交互方案......
  • 拓展01 :代码风格/Python Style
    代码规范关于代码规范,详细内容可以看PEP8这是Python官方对于代码规范的要求。以下我来总结几点重要内容。关于空格使用空格来表示缩进而不要用制表符(Tab)。和语法相关的每一层缩进都用4个空格来表示。每行的字符数不要超过79个字符,如果表达式因太长而占据了多行,除了首......
  • python接入百度智能云API实现ai对话
    python接入百度智能云API实现ai对话千帆大模型平台-百度智能云千帆代码段:importrequestsimportjson#获取访问令牌的函数defget_access_token():#百度AI开放平台的API地址,用于获取access_tokenurl="个人url"#将空字符串转换为JSON格式payload......