zoukankan      html  css  js  c++  java
  • py 的 第 19 天

    ---恢复内容开始---

    今天首先又讲解了一下,os模块,说实话还是不太懂,这次连自我安慰都不安慰了,说什么被动知道,唉,有点慌啊16期?不行打死不能16期不想退路就完了,
    下面的这几个都是应该昨天写的就会的,可是 唉

    os.system("bash command") 运行shell命令,直接显示

    os.popen("bash command).read() 运行shell命令,获取执行结果
    os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径
    os.chdir("dirname")  改变当前脚本工作目录;相当于shell下cd
    os.remove()  删除一个文件
    os.rename("oldname","newname")  重命名文件/目录
    os.stat('path/filename')  获取文件/目录信息

    os.listdir('dirname') 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印



    剩下的都是ok的,也不能算是ok吧,就是今天讲的,还算OK



    把路径中不符合规范的/改成操作系统默认的格式这个要看具体格式了,win 和利尼克斯系统都不一样
    变量=os。path。abspath('D:/sylar/s15/day19/4.os模块.py')
    print(变量)
    什么也不变的情况下,把最后一个/删除,也就是相对路径,会在下面把绝对路径给你
    这个就是把一个路径分成两段,第二段是一个文件夹,或文件,就是要把路径中最后一个截出来
    path= os.path.split('/Users/apple/PycharmProjects/1/1/赵一宁作业.py')
    print(path)
    path= os.path.split('/Users/apple/PycharmProjects/1/1')
    print(path)

     如果你两个值都需要 os.path.split

    如果你只要一个值 os.path.dirname/os.path.basename

    dir是前面的那一段,bas是后面的文件

    判断一个路径是否存在

    a=os.path.exists(r'文件夹路径‘)

    print(a)

    a=os.path.isabs('文件名‘)

    print(A)    判断是否为绝对路径

    a=os.path.isabs(r'文件夹路径‘)加个r会少很多不必要的麻烦,我觉得r应该翻译为原读,写啥读啥没那么多事

    print(a)这个不是特重要的

    a=os.listdir('路径名‘)

    这个一下a打印出这个路径下所有文件夹名,和文件名

    a=os。path。isdir(r‘文件’)这里的r都是怕误会   是否是文件夹

    a=os。path。isfile(r‘文件’)这里的r都是怕误会   是否是文件

    a=os.path.join(‘路径名’,‘文件’) 我怀疑这两个都可以使用变量

    print(a) 这个打印不管路径文件夹名真假,

    s=os.path.getsize(r“文件的绝对路径带文件“)         也可查看文件夹

    print(s)查看文件大小,查看的是字节

    所有的文件夹都至少是4096个字节  或8192  成被的增加

    64个字节+32个字节/新文件      

    无法使用py代码统计一个文件夹中所有的文件的大小

     exists  昨天讲的,说这个路径存在不存在,存在就是true 不是就false 

    def func(path):    # r'D:sylars15'       这一开始没问题就是函数一个形参
    size_sum = 0              先列一个一会要算总数的
    name_lst = os.listdir(path)      路径名,打印这个路径下所有的文件夹,文件
    # print(name_lst)              打印一下
    for name in name_lst:            从这些文件夹,文件里循环
    path_abs = os.path.join(path,name)   就把这些东西加在路径后面
    # print(path_abs)          打印一下
    if os.path.isdir(path_abs):      如果上一个变量是文件夹
    size = func(path_abs) 调用这个函数,如果还是文件夹还打开,直到是文件,加一下他的内存数返回新变量,然后这个变量再加开始计数的
    size_sum += size
    else:              如果不是文件夹,那就是文件了
    size_sum += os.path.getsize(path_abs)  开始计数的加一下这个文件的内存数
    return size_sum返回最后的计数的值

    ret = func(r'/Users/apple/PycharmProjects/1/1')这个实参是文件路径
    print(ret)

    lst = [r'D:sylars15',]  # 列表的第一个目录就是我要统计的目录

    size_sum = 0

    while lst:   # [r'D:sylars15',]  lst = ['D:sylars15day01','D:sylars15day01'..]

        path = lst.pop()  # path = 'D:sylars15' lst = []

        path_list = os.listdir(path)  # path_list = ['day01',day02',aaa,day15.py]

        for name in path_list:  # name = day01

            abs_path = os.path.join(path,name)

            if os.path.isdir(abs_path):   # 文件夹的逻辑

                lst.append(abs_path)        # lst.append('D:sylars15day01') lst = ['D:sylars15day01']

            else:

                size_sum += os.path.getsize(abs_path)

    print(size_sum)

    # exec('字符串数据类型的python代码')

    # eval('执行字符串数据类型的python代码')

    # os.system('执行字符串数据类型的操作系统命令')

    # os.popen('执行字符串数据类型的操作系统命令,并返回结果')

    后来又讲了很多os,讲了面对操作系统的操作,和面对py的操作说是日后,实战再说


    dic = {1 : 'value',2 : 'value2'}

    ret = json.dumps(dic)  # 序列化

    print(dic,type(dic))

    print(ret,type(ret))

    #

    res = json.loads(ret) # 反序列化

    print(res,type(res))

    把任何格式转成字符串就是序列化,把字符串转回他原来的类型就是反序列化





    转成其他类型了
    转回来都是列表了 元组做value 转回来也是列表
    集合是不可json的类型   直接报错
    元组做key 直接报错

    josn是在所有语言中通用的,josn序列化的数据,在py上序列化了,在java中也可以反序列化

    json 在所有的语言之间都通用 : json序列化的数据 在python上序列化了 那在java中也可以反序列化

    能够处理的数据类型是非常有限的 : 字符串 列表 字典 数字

    字典中的key只能是字符串

     能多次dump一个数据      能不能多次loads

    # 问题5 不支持连续的存 取

    # dic = {'key1' : 'value1','key2' : 'value2'}

    # with open('json_file','a') as f:

    #     json.dump(dic,f)

    #     json.dump(dic,f)

    #     json.dump(dic,f)

    # with open('json_file','r') as f:

    #     dic = json.load(f)

    # print(dic.keys())

    # 需求 :就是想要把一个一个的字典放到文件中,再一个一个取出来???

    # dic = {'key1' : 'value1','key2' : 'value2'}

    #

    # with open('json_file','a') as f:

    #     str_dic = json.dumps(dic)

    #     f.write(str_dic+' ')

    #     str_dic = json.dumps(dic)

    #     f.write(str_dic + ' ')

    #     str_dic = json.dumps(dic)

    #     f.write(str_dic + ' ')

    # with open('json_file','r') as f:

    #     for line in f:

    #         dic = json.loads(line.strip())

    #         print(dic.keys())

    # json

    # dumps loads

        # 在内存中做数据转换 :

            # dumps 数据类型 转成 字符串 序列化

            # loads 字符串 转成 数据类型 反序列化

      网络文件传输这样比较多

    # dump load

        # 直接将数据类型写入文件,直接从文件中读出数据类型

            # dump 数据类型 写入 文件 序列化

            # load 文件 读出 数据类型 反序列化

    # json是所有语言都通用的一种序列化格式

        # 只支持 列表 字典 字符串 数字

        # 字典的key必须是字符串

    # dic = {'key':'你好'}

    # print(json.dumps(dic,ensure_ascii=False))

    # import json

    # data = {'username':['李华','二愣子'],'sex':'male','age':16}

    # json_dic2 = json.dumps(data,sort_keys=True,indent=4,separators=(',',':'),ensure_ascii=False)

    # print(json_dic2)

    sort_keys   排序
    indent 开头加几个空格
    separators 以括号里的东西为基数分离,至于为啥:没分不清楚了

    ensure_ascii 确认使用编码吗? 如果是打印出来的就是字节了

    import pickle
    pickle
    1几乎支持所有类型的

    dic = {(1,2,3):{'a','b'},1:'abc'}

    # ret = pickle.dumps(dic)      这样是把dic打印出p单独能读的字节

    # print(ret)

    #2. dumps 序列化的结果只能是字节

    # print(pickle.loads(ret))  这个只有上面打印出字节,下面再转换一下

    3,只能在py中使用

    # dump

    # with open('pickle_file','wb') as f:

    #     pickle.dump(dic,f)     这样就写在file这个文件夹里去了, 不过要记得wb这个都是字节

    # load

    # with open('pickle_file','rb') as f:

    #     ret = pickle.load(f)

    #     print(ret,type(ret))       这里也一样要rb

    可以一直dump   也可以一直load

    load的话要写一个try    excpet   

    EOFError:      大概都是这个报错







    ---恢复内容结束---

  • 相关阅读:
    函数和函数模版在一个。cpp中的情况!(除了左移和右移,其他的不要用友元函数!!!)
    const typedef 和指针的问题(这里必须初始化的才初始化了,不必须的则没有初始化)
    const constptr 和引用的盲点(未解决)
    对于数据流建模和行为级建模的梳理(重点)
    vivado实现模16的计数器
    用vivado实现4比特加法器
    三输入或门(发现这个玩意很不好耍,编程出现错误,不知道哪里出现的,一不小心2输成3也无法查证)
    SpringMVC第一个例子
    Mybatis与Spring的mapper代理整合方法
    Mybatis与Spring的原生Dao整合
  • 原文地址:https://www.cnblogs.com/Mrszhao/p/9520720.html
Copyright © 2011-2022 走看看