模块/os/sys/json

内容概要

  • os模块
  • sys模块
  • json模块/实战

1.os模块

# os模块主要是与我们的操作系统打交道
1.创建文件夹(目录)
import os
os.mkdir(文件夹名字)  # 创建当前文件目录下单极空文件夹 
os.makedirs(文件夹名字/文件夹名字) # 创建当前文件目录下多级空文件夹/也可以单文件夹

image

2.删除文件夹
import os
os.rmdir('module1')  # 删除单级空目录
os.removedirs('module2/mm1/m1')  # 删除多级空目录

image

3.获取文件所在位置文件名称
import os
print(os.listdir())  # 获取执行文件当前目录的文件名
print(os.listdir('C:\\'))  # ()可以填写具体路径查询当前目录下的所有文件

image

4.修改文件名与删除文件(当前文件所在路径)
import os
os.rename('bb.txt','xiaoxin.txt')  # 更改当前目录下的文件名字
os.remove('bb.txt')  # 删除当前目录内的指定文件

image

5.获取当前执行文件的目录名
import os
# 获取当前工作文件的目录名
print(os.getcwd())  # 获取当前工作文件的目录名称
os.chdir('..')  # 切换到上层目录
os.chdir('..//..')  # 切换到上上层目录
print(os.getcwd())

image

6.动态获取执行文件的路径/目录  !!
import os
# 动态获取执行文件绝对路径
print(os.path.abspath(__file__))  # D:\pythonProject\Day19\今日概要.py
print(os.path.dirname(__file__))  # D:/pythonProject/Day19

image

7. 判断路径内文件/目录是否存在 
import os.path
# 
os.makedirs('module1/mm1')  # 如果文件存在就无法创建新的空文件目录
print(os.path.exists(r'xiaoxin.txt'))  # 判断当前执行文件目录内文件名是否存在
print(os.path.exists('bb.txt'))   # 无法判断除当前执行文件目录外其他层级的文件
print(os.path.exists('module1/mm1/bb.txt'))  # 填写详细路径即可做判断

image

8. 判断路径内文件是否存在
import os.path

print(os.path.isfile('module1/mm1/bb.txt'))

9.判断路径文件夹是否存在

print(os.path.isdir('mm1'))
10.拼接路径 !!
import os
s1 = r'D:\pythonProject\Day19'
s2 = r'今日概要.py'
print(os.path.join(s1, s2))
11.计算文件内部字符数量
import os

print(os.path.getsize('module1/mm1/bb.txt'))

image

2.sys模块

sys模块主要是帮助我们与python解释器打交道

import sys

path
1.print(sys.path)  # 	返回当前Py的环境路径(当前py环境可以导入内置、第三方包与函数的所在路径)


platform
2.print(sys.platform)  #  获取当前系统平台(如windows、Mac、linux)


version
3.print(sys.version)  # 3.8.6 (tags/v3.8.6:db45529, Sep 23 2020, 15:52:53) [MSC v.1927 64 bit (AMD64)]  获取当前 Python 的版本

modules
4.print(sys.modules)  # 将Python启动时加载的模块集合起来并返回一个列表

getrecursionlimit()
5.print(sys.getrecursionlimit())  # 获取python解释器默认最大递归深度 ()可以填写参数更改最大递归深度

argv
6.
#  argv 获取程序外部的参数,返回值是一个列表
res = argv
if len(res) != 3:
    print('执行命令缺少了用户名或密码')
else:
    username = res[1]
    password = res[2]
    if username == 'xiaosui' and password == '123':
        print('您好 文件正常执行')
    else:
        print('您不是无权执行该文件')
        
  它主要是在cmd终端中添加的功能,如果需要用终端调用这个文件,那么必须要传输参数 在文件后面 如果不传输就不可以使用这个文件

image

3.json模块/实战

json 是一种'字符串'数据格式 
我们使用json格式数据就可以让编程语言中的数据轻松的转换到别的编程语言中
json模块的主要功能是将序列化数据从文件里读取出来或者存入文件
序列化可以打破语言限制实现不同编程语言之间数据交互
'''
json 数据的形式都是字符串类型,并且是双引号引起来的
'''
1.针对数据
dumps
d1 = {'name': 'xiaoming', 'age': 18, 'sex': 'male', 'account': 15000}
json_dict1 = json.dumps(d1)
print(json_dict1)  # 转为 json 格式

loads
with open('xiaoxin.txt','r',encoding='utf8') as f:
    for i in f:
        print(json.loads(i), type(json.loads(i)))
        
# {'1': {'name': 'xiaoming', 'age': 18, 'sex': 'male', 'account': 15000}} <class 'dict'>

2.针对文件
dump
d1 = {1: {'name': 'xiaoming', 'age': 18, 'sex': 'male', 'account': 15000}}
# json_dict1 = json.dumps(d1)
# print(json_dict1)
with open('xiaoxin.txt','w',encoding='utf8') as f:
    json.dump(d1, f)
    可以直接把d1字典类型转为json格式并直接写入文件中
    
load
with open('xiaoxin.txt','r',encoding='utf8') as f:
    data = json.load(f)
    print(data,type(data))
# {'1': {'name': 'xiaoming', 'age': 18, 'sex': 'male', 'account': 15000}} <class 'dict'>
def register():
    import os
    import json
    # 存储用户数据建立信息存放库
    start_file = os.path.dirname(__file__)  # 获取当前执行文件目录名
    db_dir = os.path.join(start_file, 'db_info')  # 拼接文件目录名和db_info文件夹
    if not os.path.isdir(db_dir):  # 判断执行文件目录中有没有db_info的文件夹
        os.makedirs(db_dir)  # 在绝对路径里面创建一个db_info文件夹
    # 获取用户输入:
    user_name = input('please input your username >>>>>:').strip()

    user_data_file = os.path.join(db_dir, f'{user_name}.json')  # 拼接用户信息文件路径

    if not os.path.isfile(user_data_file):
        pass_word = input('please input your password >>>>>:').strip()
        user_dict = {   # 创建用户数据字典
             'user_name': None,
             'pass_word': None,
             'age': None,
             'account': 15000
        }
        user_dict['user_name'] = user_name
        user_dict['pass_word'] = pass_word

        with open(f'{user_data_file}','w',encoding='utf8') as f:
            json.dump(user_dict, f)
            print(f'恭喜用户{user_name}注册成功~!')
    else:
        print('用户名已存在!')
        
def login():
    start_file = os.path.dirname(__file__)  # 获取当前执行文件目录名
    db_dir = os.path.join(start_file, 'db_info')  # 拼接文件目录名和db_info文件夹
    if not os.path.isdir(db_dir):  # 判断执行文件目录中有没有db_info的文件夹
        os.makedirs(db_dir)  # 在绝对路径里面创建一个db_info文件夹
    user_name = input('please input your username >>>>>:').strip()
    user_data_file = os.path.join(db_dir, f'{user_name}.json')
    if os.path.isfile(user_data_file):
        pass_word = input('please input your password >>>>>:').strip()
        with open(f'{user_data_file}','r',encoding='utf8') as f:
            real_user_dict = json.load(f)
            if real_user_dict['user_name'] == user_name and real_user_dict['pass_word'] == pass_word:
                print(f'欢迎光临,用户{user_name}登录成功')
    else:
        print('用户名都错了,密码还能对了吗,小笨蛋?')

4.练习题及答案

### 作业

​```python
1.编写一个统计指定文件类型的脚本工具
 输入指定类型的文件后缀
     eg:.txt
 并给出一个具体路径 之后统计该类型文件在该文件下的个数
  ps:简单实现即可 无需优化
# solution1:
target_file_class = input('请输入您想要查询的文件后缀名').strip()
target_path = input('请输入您想要查询信息的路径>>>>>>:').strip()
data_list = os.listdir(r'{}'.format(target_path))
l2 = []
for i in data_list:
    if target_file_class in i:
        l2.append(i)
print('您好您需要找的数据为:',l2, '共', len(l2), r'个{}类型的文件'.format(target_file_class))




2.针对json实操 尝试单文件多用户(一行一个)是否可实现>>>:哪个更方便
    不要求完成 单纯体会两种思路的难易
    
    实现不了

    
3.编程小练习
 有一个目录文件下面有一堆文本文件
     eg:
      db目录
            J老师视频合集
            R老师视频合集
            C老师视频合集
            B老师视频合集
 文件内容自定义即可 要求循环打印出db目录下所有的文件名称让用户选择
  用户选择哪个文件就自动打开该文件并展示内容
  涉及到文件路径全部使用代码自动生成 不准直接拷贝当前计算机固定路径
import os

start_file = os.path.dirname(__file__)

db_dir_path = os.path.join(start_file, 'db_dir')
if not os.path.isdir(db_dir_path):  # 判断执行文件目录中有没有db_dir的文件夹
    os.makedirs(db_dir_path)
file_name = os.listdir(db_dir_path)
while True:
    for i in file_name:
        vision = i.strip('.txt')
        print(vision)
    choice = input('请输入您想要观看的文件名>>>>>>:')
    real_file_path = os.path.join(db_dir_path, (choice + '.txt'))
    if len(choice) == 7:
        with open(real_file_path, 'r', encoding='utf8') as f:
            for line in f:
                print(line)
    else:
        print('请输入正确的文件名!')

4.周末大作业(尝试编写)
 # 项目功能
    1.用户注册
     2.用户登录
     3.添加购物车
     4.结算购物车
 # 项目说明
    用户数据采用json格式存储到文件目录db下 一个用户一个单独的文件
     数据格式 {"name":"jason","pwd":123} 
         # ps:文件名可以直接用用户名便于校验
     用户注册时给每个用户添加两个默认的键值对(账户余额 购物车)
      {"balance":15000,"shop_car":{}}
     添加购物车功能 商品列表可以自定义或者采用下列格式
            good_list = [
                    ['挂壁面',3]
                    ['印度飞饼', 22]
                 ['极品木瓜', 666], 
                 ['土耳其土豆', 999],  
                 ['伊拉克拌面', 1000],  
                 ['董卓戏张飞公仔', 2000],  
                 ['仿真玩偶', 10000] 
            ]
      用户可以反复添加商品,在购物车中记录数量
        {'极品木瓜':[个数,单价]}
     结算购物车
      获取用户购物车中所有的商品计算总价并结算即可
  针对添加购物车和结算只有登录的用户才可以执行
​```
posted @ 2022-10-20 21:04  dd随风  阅读(35)  评论(0编辑  收藏  举报