一. os 模块 所有关于操作系统的内容都在os模块
os.makedirs("d:/1PY/新建文件夹/宝宝") # 可生成多层递归目录
os.removedirs("d:/1PY/新建文件夹/宝宝") # 若目录为空, 则删除, 并递归到上一级目录, 如若也为空, 则删除, 依次类推
os.mkdir("d:/1PY/新建文件夹") # 生成单级目录, 相当于shell中mkdir dirname
os.rmdir("d:/1PY/新建文件夹") # 删除单级空目录, 若目录不为空则无法删除, 报错, 相当于shell中的rmdir dirname
lst = os.listdir("d:/") # 列出指定目录下的所有文件和子目录, 包括隐藏文件, 并以列表方式打印
"d:" 当前文件所在文件夹下 "d:/" d盘
print(lst)
os.remove("") # 指定删除一个文件
os.rename("d:/1PY/周末大作业", "d:/1PY/周末作业") # 重命名文件, 目录
ret = os.stat("d:/1PY/周末作业") # 获取文件/目录信息
print(ret)
os.stat_result(st_mode=16895, st_ino=1688849860285352, st_dev=399180, st_nlink=1, st_uid=0, st_gid=0,
st_size=4096, st_atime=1545896396, st_mtime=1545540100, st_ctime=1543629480)
stat 结构:
st_mode: inode 保护模式
st_ino: inode 节点号。
st_dev: inode 驻留的设备。
st_nlink: inode 的链接数。
st_uid: 所有者的用户ID。
st_gid: 所有者的组ID。
st_size: 普通文件以字节为单位的大小;包含等待某些特殊文件的数据。
st_atime: 上次访问的时间。
st_mtime: 最后一次修改的时间。
st_ctime: 由操作系统报告的"ctime"。在某些系统上(如Unix)是最新的元数据更改的时间,
在其它系统上(如Windows)是创建时间(详细信息参见平台的文档)。
os.system("dir") # 运行shell命令, 直接显示
print(os.popen("dir").read()) # pipe open 运行shell命令, 获取执行结果
ret = os.getcwd() # current working directory 获取当前工作目录, 即当前python脚本工作的目录路径
print(ret)
os.chdir("d:/1PY/周末作业") # 改变当前脚本工作目录, 相当于 shell下 cd
ret = os.getcwd()
print(ret)
os.path
ret = os.path.abspath("d:/1PY/Day20/x1.txt") # absolute path 返回path规范化的绝对路径
print(ret)
ret = os.path.split("d:/1PY/周末作业") # 将path分割成目录和文件名二元组返回
print(ret)
('d:/1PY', '周末作业')
print(os.path.dirname("d:/1PY/周末作业")) # 返回path的目录, 其实就是os.path.split(path)的第一个元素
d:/1PY
print(os.path.dirname(__file__)) # 当前文件的文件夹
print(os.path.dirname(os.path.dirname(__file__))) # 当前文件的文件夹的文件夹
os.path.basename("d:/1PY/周末作业") # 返回path最后的文件名, 如果path以/或\结尾, n那么就会返回空值, 即os.path.split(path)的第二个元素
print(os.path.exists("d:/1PY/周末大作业")) # 如果path存在, 返回True, 如果path不存在, 返回False
os.path.isabs("path") # 如果path是绝对路径, 返回True
os.path.isfile("") # 如果path是一个存在的文件, 返回True, 否则返回False
os.path.isdir("") # 如果path是一个存在的目录, 则返回True
os.path.join(path[, path2[, ...]]) # 将多个路径组合后返回, 第一个绝对路径之前的参数将被忽略
print(os.path.join("d:/2PY", "Day23"))
d:/2PY/Day23
print(os.path.getatime("d:/2PY/Day23 模块_02")) # 返回path指向的文件或目录的最后访问时间
print(os.path.getmtime("d:/2PY/Day23 模块_02")) # 返回path指向的文件或目录的最后修改时间
print(os.path.getsize("d:/2PY/Day22 模块_01")) # 返回path的大小
1545899709.7857668
1545894003.6891558
0
特殊属性
print(os.sep) # 输出操作系统特定的路径分隔符, win下为"\\", linux下为"/"
print(os.linesep) # 输出当前平台使用的行终止符 win下为"\r\n", linux下为"\n"
print(os.pathsep) # 输出用于分割文件路径的字符串 win下为";", linux下为":"
print(os.name) # 输出字符串指示当前使用平台 win下为"nt", linux下为"posix"
二. sys模块 所有关于python解释器相关的都在sys模块
print(sys.argv) # 命令行参数list, 第一个元素时程序本身路径
['D:/1PY/Day23/Day23_练习.py']
sys.exit(0) # 退出程序, 正常退出是exit(0), 错误退出sys.exit(1)
print(sys.version) # 获取python解释程序的版本信息
3.6.7 (v3.6.7:6ec5cf24b7, Oct 20 2018, 12:45:02) [MSC v.1900 32 bit (Intel)]
重要
print(sys.path) # 返回模块的搜索路径, 初始化时使用pythonpath环境变量的值
['D:\\1PY\\Day23', 'D:\\1PY', 'D:\\python\\python36.zip', 'D:\\python\\DLLs',
'D:\\python\\lib', 'D:\\python','D:\\python\\lib\\site-packages',
'D:\\pycharm\\PyCharm 2018.2.4\\helpers\\pycharm_matplotlib_backend']
sys.path.append("D:/2PY")
print(sys.path)
['D:\\1PY\\Day23', 'D:\\1PY', 'D:\\python\\python36.zip', 'D:\\python\\DLLs',
'D:\\python\\lib', 'D:\\python', 'D:\\python\\lib\\site-packages',
'D:\\pycharm\\PyCharm 2018.2.4\\helpers\\pycharm_matplotlib_backend', 'D:/2PY']
print(sys.platform) # 返回操作系统平台名称
win32
三. 序列化
序列化就是把内存里的数据类型转变为字符串, 以使其能存储到硬盘或通过网络传输到远程, 因为硬盘或网络传输时只能接受bytes
python中存在三种序列化的方案:
1. pickle: 可以将python中的任意数据类型转化成bytes并写入到文件中, 同样也可以吧文件中写好的bytes转换回我们python的数据, 这个过程被称为反序列化
2. shelve: 简单另类的一种序列化方案, 有点类似后面我们学到的redis, 可以作为一种小型的数据库使用
3. json:将python中常见的字典, 列表转换成字符串, 是目前前后端数据交互使用频率最高的一种数据格式
四. pickle
1. dumps() 把对象序列化成字节
2. loads() 把字节反序列化成对象
import pickle
class Cat():
def __init__(self, name, age):
self.name = name
self.age = age
def catchMouse(self):
print(self.name, "抓老鼠")
c = Cat("jerry", 18)
bs = pickle.dumps(c) # 把对象序列化
print(bs) # 二进制格式
cc = pickle.loads(bs) # 把二进制反序列化成对象
cc.catchMouse()
# jerry 抓老鼠
3. dump() 把对象序列化写入文件
4. load() 把文件中的内容反序列化成对象
with open("cat", mode = "wb") as f:
pickle.dump(c, f)
with open("cat", mode = "rb") as f:
cc = pickle.load(f)
cc.catchMouse()
# jerry 抓老鼠
pickle还支持多个对象的导入
lst = [Cat("jerry", 19), Cat("tommy", 20), Cat("alpha", 21)]
with open("catt", mode = "wb") as f:
for el in lst:
pickle.dump(el, f) # 把对象写入到文件中
with open("catt", mode = "rb") as f:
for i in range(len(lst)):
cc = pickle.load(f) # 从文件中读取对象
cc.catchMouse()
上面的写法不太好, 因为在读的时候, 并不知道有多少对象要读,
最好是把要写的多对象装入一个列表里
with open("cattt", mode = "wb") as f:
pickle.dump(lst, f)
with open("cattt", mode = "rb") as f:
lst = pickle.load(f)
for el in lst:
el.catchMouse()
五. json https://www.cnblogs.com/loleina/p/5623968.html
全称: javascript object notation jr对象简谱, 是一种轻量级的数据交换格式。Json最广泛的应用是作为AJAX中web服务器和客户端的通讯的数据格式
javascript中的json类似python中的字典
python: True, False, None
json: true, false, null
我们的程序时python写的, 但是前端是在JS那边解析json的, 所以, 我们需要把程序产生的字典转化成json格式的json串, 字符串
1.dumps() 把对象序列化成json
2.loads() 把json反序列化成对象
dic = {"a": "女王", "b": "萝莉", "c": "小清新"}
s = json.dumps(dic, ensure_ascii=False) # 把字典转化成字符串
# ensure_ascii:默认值True,如果dict内含有non-ASCII的字符,则会类似\uXXXX的显示数据,设置成False后,就能正常显示
print(s)
{'a': '女王', 'b': '萝莉', 'c': '小清新'}
dic = json.loads(s)
print(type(dic), dic)
<class 'dict'> {'a': '女王', 'b': '萝莉', 'c': '小清新'}
3.dump() 把对象序列化写入文件
4.load() 把文件中的内容反序列化成对象
lst = [{"a": 1}, {"b": 2}, {"c": 3}]
# 写入
with open("test.json", mode = "w", encoding = "utf-8") as f:
for el in lst:
s = json.dumps(el, ensure_ascii=True) + "\n"
f.write(s)
# 读取
with open("test.json", mode = "r", encoding = "utf-8") as f:
for line in f:
dic = json.loads(line.strip())
print(dic)
# 两个函数的唯一区别就是dump把python对象转换成json对象生成一个fp的文件流,而dumps则是生成了一个字符串: