进入python的世界_day19_python基础——os模块、sys模块、json模块

一、os模块

一、常用os代码

代码 功能
os.mkdir() 生成单级目录
os.makedirs() 可生成多层递归目录
os.rmdir() 删除单级空目录
os.removedirs() 递推删除空目录,遇到非空目录停下
os.listdir() 把指定目录下的所有文件和子目录还有隐藏的文件都打印出来,以列表形式返回
os.remove() 删除一个文件
os.rename() ("oldname","newname" ) 重命名文件/目录
os.getcwd() 获取当前工作目录
os.chdir() 改变当前脚本工作目录
os.path.abspath() 返回path规范化的绝对路径,比如双下file获取执行文件的绝对路径,带文件自己
os.path.dirname()重要 获取执行文件所在的sys.path,不带文件自己,无论谁电脑启动,都动态取,可套娃来获取上层
os.path.exists/isdir() 判断路径是否存在,返回布尔值
os.path.isfile() 判断文件是否存在,返回布尔值
os.path.join(path1[, path2[, ...]]) 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
os.path.getsize() 获取文件大小(字节为单位)

补充:

os.path.splitext(path) 将路径的文件名和后缀名分割
os.curdir 返回当前目录: ('.')

二、sys模块

代码 功能
sys.path 获取执行文件的已经添加到系统的环境变量路径
sys.version 获取python解释程序的版本信息
sys.argv() 在用cmd命令执行代码文件时,括号第一个元素是代码文件本身路径,后面的元素都是参数,组成一个参数列表,可以未来让Py文件变成命令行执行时,对传参做出限制

三、json模块——很重要

1.概念

​ 因为我们以后不可能单单用python这一门语言写,还有可能用jave c++等写,那么不同的语言语法不互通怎么办?

​ json模块有点类似翻译官,而且是懂很多很多语言的翻译官,给两个不同的编程软件做翻译

2.序列化

​ 翻译的过程就叫做序列化,把内存的数据类型转为一个特定的格式的内容,然后传输给其他平台使用

​ 比如转为json格式的内容

3.反序列化

​ 也很好理解,类似编码和解码,反序列化就是把json格式的内容转成内存中的数据类型

4.特点

​ 所有json数据,都是用" "符号

5.如何序列化与反序列化

​ 格式:所有数据类型

​ json.dumps() json.loads()

​ 针对文件类型

​ jason.dump() json.load()

import json
t = 'hello'
print(t, type(t))
t = json.dumps(t)              # 序列化 
print(t, type(t))
>>>
hello <class 'str'>
"hello" <class 'str'>
_______________________________________
import json
t = ['hello', 'wordl']
print(t, type(t))
t = json.dumps(t)               # 序列化 
print(t, type(t))
>>>
['hello', 'wordl'] <class 'list'>
["hello", "wordl"] <class 'str'>

————————————————————————————————————————
l = json.loads(t)
print(l,type(l))                    # 反序列化
>>>
['hello', 'wordl'] <class 'list'>

# 将序列化的结果接入文件的简单方法,要熟练!!!
import json

with open('test.json', 'w', encoding='utf8') as f:
    json.dump(['hello', 'world'],f)

# 同理,读取文件内json格式的字符串后反序列化
import json

with open('test.json', 'r', encoding='utf8') as f:
    json_res = f.read()
    a = json.loads(json_res)
    print(a, type(a))
>>>
['hello', 'world'] <class 'list'>

作业

1.编写一个统计指定文件类型的脚本工具
输入指定类型的文件后缀
eg:.txt
并给出一个具体路径 之后统计该类型文件在该文件下的个数
ps:简单实现即可 无需优化

def func():
    import os
    check_name = input('请输入您要查询的文件类型>>>:')
    check_path = input('请输入您要查询的路径>>>:')
    t = os.listdir(f'{check_path}')
    list = []
    for i in t:
        filename, leixing = os.path.splitext(i)
        list.append(leixing)
    count = list.count(f'{check_name}')
    print(f'您要查询的{check_name}类型文件在{check_path}中的个数为{count}')

func()

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

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

import os

db_path = os.path.dirname(__file__)
file_db = os.listdir(db_path)
for file in file_db:
    print(file)
while True:
    choice_file = input('请选择要浏览的文件夹>>>:').strip()
    choice_file_path = os.path.join(os.path.dirname(__file__), f'{choice_file}')
    list_choice = os.listdir(choice_file_path)
    if not list_choice:
        print('目标文件夹为空哦')
        continue
    print(f'******该文件夹{choice_file}所含文件******')
    for i in list_choice:
        print(i)
    print('***************************************')
    break

while True:
    file_path = input('请选择您要打开的文件>>>:')
    real_file_path = os.path.join(choice_file, file_path)
    if file_path in list_choice:
        with open(r'%s' % real_file_path, 'rt', encoding='utf8') as f:
            print(f.read())

    else:
        print('没有找到您要打开的文件啦')
posted @ 2022-10-20 21:21  yiwufish  阅读(122)  评论(0)    收藏  举报