---恢复内容开始---
今天首先又讲解了一下,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: 大概都是这个报错
---恢复内容结束---