目录

昨日内容回顾

一、模块的绝对导入和相对导入

​ 1.绝对导入:以执行文件所在的sys.path为起始路劲,然后一层一层向下找,如果不是用pycharm运行就会报错,则需要将项目根目录添加到sys.path

​ 2.相对导入:以当前模板文件路径为准,只能在模板文件中使用,不能在执行文件中使用,相对导入在项目中比较复杂的情况下可能会报错,所以不推荐使用

二、包的概念

​ 1.概念:内部含有双下init.py的文件夹

​ 2.作用:为了更加方便的管理模块文件

​ 3.使用:导入包名其实导入的是里面的__init__.py文件,通过相对导入将其他模块导入__init__.py文件中,然后在执行文件中通过点的方式使用模块里的名字,也可以使用绝对路径直接跨过__init__.py直接导入包里面的模块文件

三、编程思想的转变

​ 小白阶段---->函数阶段---->模块阶段

​ 不断地变化进步目的是为了更加方便快捷高效的管理资源

四、软件开发目录规范

​ 根据我们的需求,高效的管理资源,分模块文件多了之后还需要有文件夹

​ bin文件夹:用于存储程序的启动文件

​ conf文件夹:用于存储程序的配置文件

​ core文件夹:用于存储程序的核心逻辑,程序的功能

​ lib文件夹:用于存储程序的公共功能

​ db文件夹:用于存储程序的数据文件

​ log文件夹:用于存储日志文件

​ interface文件夹:用于存储一些接口文件

​ readme文本文件:类似于说明书

​ requirements.txt文件:用于存储程序所需的第三方模块名称和版本

五、常见的内置模块

​ 1.collections模块

​ namedtuple(具名元组)、deque(双端列表)、orderdict(有序字典)、defaultdict(默认值字典)、counter(计数器)

​ 2.time模块

​ 时间戳 time.time()、结构化时间 time.gmtime()、格式化时间 time.strftime()

​ struct_time通过 strftime 转变为Format string

​ Format string通过 strptime 转变为struct_time

​ struct_time通过 mktime 转变为Timestamp

​ Timestamp通过 localtime gmtime 转变为struct_time

<center><font size=30px color=LightSeaGreen>今日学习内容</font></center>

一、时间模块之datatime模块

1.datetime.datetime.today()

​ 表示的是当前的时间 年月日时分秒 秒数精确到了后6位

import datetime
res = datetime.datetime.today() # 2022-07-15 15:28:26.400621
print(res)

2.datetime.date.today()

​ 表示的是当前的时间 年月日

import datetime
res1 = datetime.date.today() # 2022-07-15
print(res1)

ps:想区分这俩个结果,就看中间的是datetime还是date,中间的是datetime那么结果就是年月日时分秒,中间的是date那么结果就是年月日

3.datetime.date.today()

​ 时间差值,可以对时间进行换算,有以下参数 如果没有的话可以通过已有的进行换算,已有的如下:

​ days: float = ..., days: float = ..., microseconds: float = ..., milliseconds: float = ..., minutes: float = ..., hours: float = ..., weeks: float = ...。

res1 = datetime.date.today()  # 2022-07-15
t1 = datetime.timedelta(days=3)
print(res1 + t1) # 2022-07-18
print(res1 - t1) # 2022-07-12

4.datetime.datetime.now()(不常用)

​ 表示的是当前时间,与datetime.datetime.today()这个重复

print(datetime.datetime.now())  # 2022-07-15 16:05:17.480020

5.通过点的方式只取年或者月或者日等内置方法

import datetime

res = datetime.datetime.today()
print(res) # 2022-07-15 16:09:51.276748
print(res.day) # 15
print(res.year) # 2022
print(res.month) # 7
print(res.hour) # 16
print(res.minute) # 11
print(res.weekday()) # 4
print(res.isoweekday()) # 5

二、os模块

os模块是与操作系统交互的一个接口

1.os.mkdir

  • 生成单级目录,如果目录存在的话就会报错,提示该文件夹已经存在不能再次创建

  • 不能创建多级目录

import os
os.mkdir(r'aaa') # 创建了新的文件夹
os.mkdir(r'aaa') # 第二次创建的时候 FileExistsError: [WinError 183] 当文件已存在时,无法创建该文件。: 'aaa'
os.mkdir(r'bbb\ccc\ddd') # FileNotFoundError: [WinError 3] 系统找不到指定的路径。: 'bbb\\ccc\\ddd'

2.os.makedirs()

  • 创建多级目录 也可以创建单级目录
os.makedirs(r'bbb\ccc\ddd')
os.makedirs(r'ccc')

3.os.rmdir()

  • 可删除单级目录,但是这个目录下面什么都没有才可以被删除,也不可以删除多级空目录
os.rmdir(r'aaa')

4.os.removedirs()

  • 对有数据的目录不可以进行删除

  • 在多级目录的情况下删除的时候是从最底下的开始,然后一层一层向上检查,如果到了那层有数据的时候,就不会删除了,没有的话就一层一层的进行删除

os.removedirs(r'bbb')
os.removedirs(r'bbb\ccc\ddd')

5.os.listdir()

  • 列出当前目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
  • 可以进行指定目录查看目录下面所有文件和子目录包括隐藏文件,并以列表方式打印
print(os.listdir())  # ['.idea', '01 时间模块.py', '02 os模块.py']
print(os.listdir(r'D:\\')) # ['$RECYCLE.BIN', 'BaiduNetdisk', 'BaiduNetdiskDownload', 'EVcapture', 'iQIYI', 'Notedpad++', 'PyCharm 2021.1.3', 'python27', 'Python38', 'pythonProject', 'PythonStudyContent', 'PythonsVideo', 'QQMusicCache', 'qycache', 'System Volume Information', 'Tencent', 'Typora', 'YouDao', '声卡']

6.os.rename()

  • 对文件进行修改名字
print(os.rename(r'a.txt', r'aaa.txt'))

7.os.remove()

  • 删除文件
print(os.remove(r'aaa.txt'))

8.os.getcwd()

  • 获取当前工作路径,绝对路径
print(os.getcwd())  # D:\pythonProject\day24

9.os.chdir()

  • 切换路径
print(os.getcwd())  # D:\pythonProject\day24
os.chdir(r'..')
print(os.getcwd()) # D:\pythonProject

10.os.path.abspath(__file__)(支持嵌套)

  • 与程序启动文件相关
  • 当前项目如果放在其他计算机上,原来的绝对路径可能会发生变化,没有办法确定项目文件所在的绝对路径
  • 如何怎加程序的兼容性? 使用os.path.dirname(os.path.dirname(file)) 嵌套可以提升层级
print(os.path.abspath(__file__))  # D:\pythonProject\day24\02 os模块.py   获取的是当前文件的绝对路径
print(os.path.dirname(__file__)) # D:/pythonProject/day24 获取的是当前文件所在的目录路径 import sys
sys.path.append(r'D:\pythonProject\day24\ATM')
# 这里的绝对路径换太电脑是没有办法确定它在哪
from core import src
src.run() # 如何怎加程序的兼容性
res = os.path.dirname(__file__) # D:/pythonProject/day24/ATM/bin
res1 = os.path.dirname(os.path.dirname(__file__)) # D:/pythonProject/day24/ATM
sys.path.append(res1)
# 嵌套可以提升层级,嵌套一次提升一层,再嵌套一次又提升一层

11.os.path.exists()、os.path.isdir()、os.path.isfile()

  • os.path.exists()前者判断路径是否存在 可以是文件可以是目录,os.path.isdir()只适用于路径是否为文件夹,os.path.isfile()只适用于路径是否文件
  • 返回的是布尔值
print(os.path.exists(r'ATM'))  # True
print(os.path.exists(r'bbb')) # False
print(os.path.exists(r'01 时间模块.py')) # True
print(os.path.isdir(r'ATM')) # True
print(os.path.isfile('01 时间模块.py')) # True

12.os.path.join(path1[, path2[, ...]])

  • 将多个路径拼接后返回,第一个绝对路径之前的参数将被忽略
  • 涉及到路径拼接不要使用 + ,建议使用os模块里的join方法,不同的操作系统路径分隔符不一样,如果使用的是‘\’,那就只能在windows系统下使用了,join会自动识别当前在什么系统下操作的,然后给予对应的分隔符
  • windows---\,mac---/
relative_path = 'a.txt'
absolute_path = r'D:\pythonProject\day24\ATM\core'
'''拼接a.txt的绝对路劲'''
res = os.path.join(absolute_path, relative_path)
print(res) # D:\pythonProject\day24\ATM\core\a.txt

13.os.path.getsize(path)

  • 获取文件大小
  • 以bytes为单位
print(os.path.getsize(r'01 时间模块.py'))  # 746

三、sys模块

与os模块可以称之为兄弟模块,sys模块主要是跟python解释器打交道

1.sys.path

  • 当前执行文件所在的系统变量,结果是列表
import sys
print(sys.path) # ['D:\\pythonProject\\day24', 'D:\\pythonProject\\day24', 'D:\\PyCharm 2021.1.3\\plugins\\python\\helpers\\pycharm_display', 'D:\\Python38\\python38.zip', 'D:\\Python38\\DLLs', 'D:\\Python38\\lib', 'D:\\Python38', 'D:\\Python38\\lib\\site-packages', 'D:\\PyCharm 2021.1.3\\plugins\\python\\helpers\\pycharm_matplotlib_backend']

2.sys.version(了解)

import sys

print(sys.version)  # 3.8.6 (tags/v3.8.6:db45529, Sep 23 2020, 15:52:53) [MSC v.1927 64 bit (AMD64)]

3.sys.platform(了解)

import sys
print(sys.platform) # win32

4.sys.argv

  • 命令行参数List,第一个元素是程序本身路径
res = sys.argv
if len(res) == 3:
username = res[1]
password = res[2]
if username == 'zhang' and password == '123':
print('您可以正在执行该文件')
else:
print('用户名或密码错误')
else:
print('请填写用户名和密码')

四、json模块

  • json模块也称之为序列化模块,是不同编程语言之间数据交互必备的模块
  • 不同编程语言之间数据类型存在差异,无法直接交互
  • json模块相当于是一个中间人,作为不同的编程语言之间数据类型先来到json这里进行转为为对方可是识别的数据类型然后再交给它

1.json格式的数据应该是什么?

​ 由于数据基于网络传输肯定是二进制,那么在python中只有字符串可以调用encode方法转成二进制数据,所以json格式的数据也是字符串

2.json格式的数据的特征是?

​ 首先肯定是一个字符串 其次引号是标志性的双引号

import json
d = {'name': 'jason', 'pwd': 123}
res = json.dumps(d) # 序列化:将其他数据类型转换为json格式字符串
print(res, type(res)) # {"name": "jason", "pwd": 123} <class 'str'>
res1 = json.loads(res) # 反序列化:将json格式字符串转换成对应编程语言中的数据类型
print(res1, type(res1)) # {'name': 'jason', 'pwd': 123} <class 'dict'>
  • 例题展示

# 方式一:使用json.dump(d, f),es = json.load(f)
import json
d = {'name': 'jason', 'pwd': 123}
with open(r'b.txt', 'w', encoding='utf8') as f:
json.dump(d, f) # 直接让字典写入文件(json自动帮你完成转换)
with open(r'b.txt', 'r', encoding='utf8') as f:
res = json.load(f)
print(res, type(res))
# 方式二: 使用f.write(json.dumps(d)),res = json.loads(data)
import json
d = {'name': 'jason', 'pwd': 123}
with open(r'b.txt', 'w', encoding='utf8') as f:
f.write(json.dumps(d))
with open(r'b.txt', 'r', encoding='utf8') as f:
data = f.read()
res = json.loads(data)
print(res, type(res))
  • 小结

    dumps() 将其他数据类型转换成json格式字符串

    loads() 将json格式字符串转化成对应的数据类型

    dump() 将其他数据数据以json格式字符串写入文件

    load() 将文件中json格式字符串读取出来并转换成对应的数据类型

    实现的需求是:不需要以拼接为字符串的形式去存储数据,用的时候又得需要进行切割,使用json模块后,可以直接存储数据,然后使用的时候直接拿出来.get就可以使用

五、json模块实操

涉及到用户数据的存储 可以单用户单文件

1.涉及到用户数据的存储 可以单用户单文件
jason.json
kevin.json
oscar.json import json
import os # 3.拼接用户名文件对应的绝对路径,用来打开文件,先把路径存一下
base_dir = r'D:\pythonProject\day24\db'
# 1.获取用户的输入
username = input('username:').strip()
# 4.获取路径下面所有的文件名,这里获取到的是用户的用户名
username_list = os.listdir(base_dir)
# 2.判断用户名是否存在
if username in username_list:
# 5.拼接文件的路径,某一个文件的完整路径
file_path = os.path.join(base_dir, username)
# 6.打开文件读取文件
with open(file_path, 'r', encoding='utf8') as f:
data = json.load(f)
print(data, type(data))
# print(os.listdir(r'D:\pythonProject\day24\db'))
# 专门放置一个文件夹用来存放用户的数据
# base_dir = os.path.dirname(__file__)
# db_path = os.path.join(base_dir,'db')
# 判断路径在不在 如果路径不存在就会创建
# if not os.path.exists(db_path):
# os.mkdir(db_path)
# username = input('username>>>:').strip()
# password = input('password>>>:').strip()
# user_dict = {'username': username,
# 'password': password,
# 'balance': 15000,
# 'shop_car':[]
# }
# 将名字拼接起来,相当于在db下存储文件,join是用来拼接文件路径的
# file_path = os.path.join(db_path, '%s'%username)
# 不要文件的后缀会变得更简单,用listdir的时候获取到的就是数据名,判断用户名是否存在的时候,如果有的话将绝对路径拼出来,就可以拿到用户的数据了
# file_path = os.path.join(db_path, '%s.json'%username)
# with open(file_path,'w',encoding='utf8') as f:
# json.dump(user_dict, f)

时间模块之datatime模块、os模块、sys模块、json模块、json模块实操的更多相关文章

  1. Python 第五篇(上):算法、自定义模块、系统标准模块(time 、datetime 、random 、OS 、sys 、hashlib 、json和pickle)

    一:算法回顾: 冒泡算法,也叫冒泡排序,其特点如下: 1.比较相邻的元素.如果第一个比第二个大,就交换他们两个. 2.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对.在这一点,最后的元素应 ...

  2. python-时间模块,random、os、sys、shutil、json和pickle模块

    一.time与datetime模块 time模块: 时间戳:表示的是从1970年1月1日00:00:00开始按秒计算的偏移量,返回类型为float类型 格式化时间字符串(Format String) ...

  3. python笔记06-----常用模块(time,os,sys,random)

    模块 1. 模块的定义和导入 定义: 模块:用来从逻辑上组织python代码(变量,函数,类,逻辑:实现一个功能),本质就是.py结尾的python文件(文件名:test.py对应的模块名:test) ...

  4. day 5 模块导入、常用模块os shutil sys commands subprocess hashlib json pickle zipfile traceback random datetime

    os: os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname") 改变当前脚本工作目录:相当于shell下cd os. ...

  5. Day5- Python基础5 模块导入、time、datetime、random、os、sys、hashlib、json&pickle

    本节目录: 1.模块的分类 2.模块的导入 3.time模块 4.datetime模块 5.random 6.os模块 7.sys模块 8.hashlib 9.json&pickle 一.模块 ...

  6. Learning-Python【19】:Python常用模块(2)—— os、sys、shutil

    os模块:与操作系统相关的模块 import os # 获取当前的工作目录 print(os.getcwd()) # 切换工作目录 os.chdir(r'E:\Python\test') print( ...

  7. Python os、sys、pickle、json等模块

    1.os 所有和操作系统相关的内容都在os模块,一般用来操作文件系统 import os os.makedirs('dirname1/dirname2') # 可生成多层递归目录 os.removed ...

  8. python基础语法11 内置模块time,datatime,random,os,sys,hashlib模块

    time模块 在python的三种时间表现形式: 1.时间戳: 给电脑看的. - 自1970-01-01 00:00:00到当前时间,按秒计算,计算了多少秒. 2.格式化时间(Format Strin ...

  9. day19:常用模块(collections,time,random,os,sys)

    1,正则复习,re.S,这个在用的最多,re.M多行模式,这个主要改变^和$的行为,每一行都是新串开头,每个回车都是结尾.re.L 在Windows和linux里面对一些特殊字符有不一样的识别,re. ...

随机推荐

  1. [AcWing 756] 蛇形矩阵

    点击查看代码 #include<iostream> using namespace std; const int N = 110; int n, m; int dx[] = {-1, 0, ...

  2. Libco Hook 机制浅析

    Libco Hook 机制浅析 之前的文章里我们提到过 Libco 有一套 Hook 机制,可以通过协程的让出(yield)原语将系统的阻塞系统调用改造为非阻塞的,这篇文章我们将深入解析 Hook 机 ...

  3. 轮播——swiper

    swiper组件 1.轮播数据是使用ajax进行填充的话,可能数目是0~n,在数目是1时,轮播会出现一些问题(出现空白侧),这时需作出判断(一张图片不滑动,多张就就行滑动),方法如下(以下方法中,si ...

  4. 200 行代码实现基于 Paxos 的 KV 存储

    前言 写完[paxos 的直观解释]之后,网友都说疗效甚好,但是也会对这篇教程中一些环节提出疑问(有疑问说明真的看懂了 ),例如怎么把只能确定一个值的 paxos 应用到实际场景中. 既然 Talk ...

  5. Python数据分析--Numpy常用函数介绍(2)

    摘要:本篇我们将以分析历史股价为例,介绍怎样从文件中载入数据,以及怎样使用NumPy的基本数学和统计分析函数.学习读写文件的方法,并尝试函数式编程和NumPy线性代数运算,来学习NumPy的常用函数. ...

  6. K8S 使用Kubeadm搭建高可用Kubernetes(K8S)集群 - 证书有效期100年

    1.概述 Kubenetes集群的控制平面节点(即Master节点)由数据库服务(Etcd)+其他组件服务(Apiserver.Controller-manager.Scheduler...)组成. ...

  7. ACW:831. KMP字符串

    感觉这道题非常有意思,学的过程中觉得及难,学完之后觉得及简单,看y总的视频没有看懂...,因此自己找了一篇博文理解并完成题目. import java.io.*; /** * @author admi ...

  8. resttemplate 请求方式详解

    get 普通请求: restemplate.getForEntity(url,String.class).getBody(); get 导出请求: restemplate.getForEntity(u ...

  9. ubuntu使用postfix和AWS-SES发送邮件

    在日常开发中,邮件发送是个比较常见的场景.因此出现了很多相关的软件和服务,各大云厂商也推出自己的邮件服务.今天笔者就像大家介绍一种常见的组合,AWS的邮件服务 SES 与邮件服务器 postfix 的 ...

  10. C++ 炼气期之变量的生命周期和作用域

    1. 前言 什么是变量的生命周期? 从变量被分配空间到空间被收回的这一个时间段,称为变量的生命周期. 什么是变量的作用域? 在变量的生命周期内,其存储的数据并不是在任何地方都能使用,变量能使用的范围, ...