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

今天首先又讲解了一下,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:\sylar\s15'       这一开始没问题就是函数一个形参
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:\sylar\s15',]  # 列表的第一个目录就是我要统计的目录

size_sum = 0

while lst:   # [r'D:\sylar\s15',]  lst = ['D:\sylar\s15\day01','D:\sylar\s15\day01'..]

    path = lst.pop()  # path = 'D:\sylar\s15' 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:\sylar\s15\day01') lst = ['D:\sylar\s15\day01']

        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+'\n')

#     str_dic = json.dumps(dic)

#     f.write(str_dic + '\n')

#     str_dic = json.dumps(dic)

#     f.write(str_dic + '\n')

 

# 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:      大概都是这个报错







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