python(os,ysy,json模块的使用)

今日内容概要

  • os与sys模块

  • json模块

    os模块

    小知识点:
    	os模块主要和操作系统打交道
        sys模块主要与python解释器打交道
    

    知识讲解:

    os是python解释器的内置包--->os包,os包拥有这普遍的操作系统功能,拥有着各种各样的函数来操作系统的驱动功能。其中最常用的就是对路径与文件的操作,比如检查某个路径下是不是存在某个文件,某个路径是否存在等。也可以创建文件、删除文件等;接下来就一起仔细的看一下os中对于文件的操作功能与用法吧。

image

创建文件夹

import os
correct_path = os.getcwd()
print(correct_path)
输出结果:
E:\pythonProject2\10.20
这是当前文件的绝对路径

1.创建目录(文件夹)
os.mkdir(r'di')# 相对路径  (在在执行文件所在的路径下创建目录  可以创建单级目录)
os.mkdir(r'd2\d22\d222')# 不可以创建多级目录
os.makedirs(r'd1\d22\d222')# 可以创建多级目录
os.makedirs(r'd3')  #可以创建单机目录

# 2.删除目录
os.rmdir(r'd1') # 删除单级目录

# os.rmdir(r'd2\d22\d22') # 不可以一次性删除多级目录

os.removedirs(r'd2\d22\d222')# 只能删除空的多级目录
os.rmdir(r'd3') # 只能删除空的单级目录

# 3.列举指定路径下的内容名称
print(os.listdir())
print(os.listdir(r'd:\\'))

# 4.删除\重命名文件
os.rename(r'a.txt',r'aaa.txt') # 重命名文件
os.remove(r'aaa.txt')  # 删除文件

# 5.获取\切换当前工作目录
print(os.getcwd()) # E:\pythonProject2\10.20

os.chdir('..') # 切换到上一级目录
print(os.getcwd()) # E:\pythonProject2

os.mkdir(r'hei')  # 在当前文件夹下创建一个文件

# 6、动态获取项目根路径(重点)

print(os.path.abspath(__file__)) # 获取执行文件的绝对路径
 # E:\pythonProject2\10.20\登录.py
    
print(os.path.dirname(__file__)) # 获取执行文件所在的目录路径
# E:/pythonProject2/10.20

7.判断路径是否存在(文件、目录)
print(os.path.exists(r'01.py')) # 判断文件路径是否存在

print(os.path.isfile(r'E:\pythonProject2\10.20')
      # 判断目录是否存在
print(os.path.isfile(r'01.py')) # 判断路径是否是文件  True
    
print(os.path.isfile(r'E:\pythonProject2\10.20'))  # 判断路径是否是文件 False 
      
  print(os.path.isdir(r'01 os模块.py'))  # False
      # 判断路径是否是一个文件夹
  
  print(os.path.isdir(r'D:\pythonProject03\day19'))  # True  
      # 判断路径是否是文件夹
      
 8.路径拼接(重要知识)
      
 (不要这么做)s1 = r'D:\pythonProject03\day19'
 s2 = r'01 os模块.py'
 print(f'{s1}\{s2}')

'''
涉及到路径拼接一定不要自己做,因为不同的操作系统路径的分割符是不一样的
'''
 正确做法:
      print(os.path.join(s1,s2))
      
  9.获取文件大小(字节)
      print(os.path.getsize(r'a.txt'))
      
      

在上面我还用到了path模块

os.path模块同样也是在我们日常开发工作中一个比较changyong的一个模块,就简单看看path的一些常用的函数。

path模块常用方法

image

sys模块

sys模块与os包一样,也是对系统资源进行调用。功能同样也是非常丰富,接下来我们就对sys模块的一些简单且常用的函数进行介绍。

image

import sys

print(sys.path) # 获取执行文件的sys.payh
print(sys.getrecursionlimit()) # 获取python解释器默认最大的递归深度
sys.setrecursionlimit(2000)  # 官方的递归深度在1000,但是也是可以修改的

print(sys.version) # 3.8.10 (tags/v3.8.10:3d8993a, May  3 2021, 11:48:03) [MSC v.1928 64 bit (AMD64)]  平台信息
```
一个只对终端才能使用功能:
sys.argv#argv 是获取程序外部的参数,返回值是一个列表。
可以在终端进行输入,从而进行判断解密

res= sys.argv
if len(res) !=3
	print('执行命名缺少了用户名和密码')
else:
    username = res[1]
    password = res[2]
   if useranme == 'jason' and password == '123';
		print('您好,开始执行文件')
    else:
    	print('您不是Jason没有权利执行该文件)
            
             

sys.argv[0] 表示当前脚本本身文件路径的该脚本文件

sys.argv其实就是一个从程序外部获取参数的桥梁,这里说的外部很关键,所以那灭试图从代码来说明的作用一直不是很明白。因为我们需要先在终端执行脚本文件,并从外部传入参数(可以是多个),所以获得的是一个列表(list),也就是说sys.argv其实可以看成是一个列表,所以才能用[ ]提取其中的值,其第一个元素是程序本身,随后依次是外部传入的参数。

import sys

print(sys.argv)

# >>> 执行结果如下:
['/Users/username/PycharmProjects/XXXXX/XXXXX/animal/package_sys.py']
# >>> 从执行结果可以看出 其输出的就是当前路径下的当前脚本本身,也就可以理解为 'sys.argv' 其实就是运行自身的脚本文件 
# >>> 我们从 '外部' 运行该脚本文件的时候,需要传入参数(可以是多个)


sys.argv 其实就是一个列表,里边需要用户传入的参数,关键就是要明白这参数是从程序外部输入的,而非代码本身的什么地方,要想看到它的效果就应该将程序保存了,从外部来运行程序并给出参数。

json模块

Jason模块也称为序列化模块,序列化可以打破语言之间限制实现不同编程语言之间的数据语言交互

json模块是一个通用的序列化模块,通过它可以完成通用化的序列化与反序列化操作。为什么说是通用的,那是因为几乎所有的编程语言都有json模块,而且他们序列化与反序列化的规则是统一的。

所以我们在 Python 中序列化的内容,在任意其他编程语言中都可以进行反序列化并使用原始的数据,这就是通用的意思

image

json的基本语法:

json的顶层支持的三种类型的值:

  • 简单值:数字,字符串(不支持单引号),布尔值类型,null类型
  • 对象值:由key、value组成,key是字符串类型,并且必须添加双引号,值可以是简单值、对象值、数据值。
  • 数据组:数据的值可以是简单值、对象值、数据值
{
  "name": "hhh",
  "age": 18,
  "friend": {"name": "sam"}
}

[ 234,"abc",{"name": "amy"}]

注意事项:

1.原始类型的值只有四种:字符串、数值(必须是十进制表示)、布尔值和null(不能使用NaN,Infinity,-Infinity和undefined)。

2.字符串必须使用双引号引起来,不能使用单引号。

3.数组用[ ]对象{ }最后一个成员的后面,不能加逗号

json相关的操作
针对数据
json.dumps()
json.loads()

针对文件
json.dump()
json.load()

json模块实战模拟

用户登注册功能
import os
import json

# 注册功能
# 1.获取执行文件所在的目录路径
base_dir = os.path.dirname(__file__)  # D:/pythonProject03/day19
# 2.拼接出db目录的路径
db_dir = os.path.join(base_dir, 'db')  # D:/pythonProject03/day19/db
# 3.创建db目录
if not os.path.isdir(db_dir):
    os.mkdir(db_dir)
# 4.获取用户数据
# username = input('username>>>:').strip()
# password = input('password>>>:').strip()
# 4.1.判断用户名是否已存在
# print(os.listdir(db_dir))  # ['jason.json', 'kevin.json', 'tony.json']  方式1
# user_file_path = os.path.join(db_dir, f'{username}.json')  方式2
# 5.构造用户字典
# user_dict = {
#     'username': username,
#     'password': password,
#     'account': 15000,  # 账户余额
#     'shop_car': []  # 购物车
# }
# 6.拼接存储用户数据的文件路径
# user_file_path = os.path.join(db_dir, f'{username}.json')  # D:/pythonProject03/day19/db/jason.json
# 7.写入文件数据
# with open(user_file_path,'w',encoding='utf8') as f:
#     json.dump(user_dict, f)
username = input('username>>>:').strip()
# 1.拼接上述用户名组成的文件路径
target_user_file_path = os.path.join(db_dir, f'{username}.json')
if not os.path.isfile(target_user_file_path):
    print('你赶紧滚蛋 用户名都不对 搞什么飞机')
else:
    password = input('password>>>:').strip()
    # 2.获取用户真实数据字典
    with open(target_user_file_path,'r',encoding='utf8') as f:
        real_user_dict = json.load(f)
    if password == real_user_dict.get('password'):
        print('登录成功')
    else:
        print('密码错误')
posted @ 2022-10-20 16:48  亓官扶苏  阅读(225)  评论(0)    收藏  举报