文件、目录操作 | 序列号
- os:可以直接调用操作系统提供的接口函数
import os
代码:
```PYTHON
import os # 导入os模块调用操作系统
SystemType = os.name # 查看当前系统类型:如果是posix,说明系统是Linux、Unix或Mac OS X,如果是nt,就是Windows系统。
print('系统类型是:{0}'.format(SystemType))# 获取当前系统详细信息 ps:windows上不适用
# 查看系统的环境变量,返回一个字典dict
# SystemDetailed = os.uname()
# print('系统详细信息如下:{0}'.format(SystemDetailed))
Path = os.environ
print(Path)
# 获取某个变量的值
print(Path.get('PATH'))
```
- 操作文件和目录:操作文件和目录的函数一部分放在os模块中,一部分放在os.path模块中
代码:
```PYTHON
# 操作文件和目录# 查看当前目录的绝对路径
AbsolutePath = os.path.abspath('.') # .(./) 代表当前目录,..(../)代表当前目录上级目录
AbsolutePath1 = os.path.abspath('..')
print(AbsolutePath,AbsolutePath1)# 在目录下新建目录
# 1. 把新目录的路径表示出来
os.path.join('.','newCatalog') # 将两个路径合成1个
# 2. 创建一个目录
os.mkdir('./newCatalog')
print(os.path.abspath('/newCatalog'))# 删除目录
os.rmdir('./newCatalog')# 拆分路径,后部分是最后级别的目录或文件名
list = os.path.split('./学习笔记.md')
print(list)# 直接得到文件扩展名
Extensions = os.path.splitext('./学习笔记.md')
print(Extensions)# 文件重名
# 1. newCatlog 新建test.txt文件
with open('./newCatlog/test.txt','w') as f:
f.write('123')
# 2.重命名
os.rename('./newCatlog/test.txt','./newCatlog/test.java')# 删除文件
os.remove('./newCatlog/test.java')# 过滤文件
# 列出当前目录下所有的目录
dirList = [x for x in os.listdir('../day25') if os.path.isdir(x)] # os.listdir(列出所有目录),os.path.isdir(目录) 判断是否是目录
print(dirList)# 列出所有.py文件;
# isfile(文件) 判断是否是文件
fileList = [ x for x in os.listdir('.') if os.path.isfile(x) and os.path.splitext(x)[1] == '.py']
print(fileList)# 实现windows dir
my_dir('C:/Windows')
def my_dir(Path):
if not isinstance(Path,str):
raise TypeError('Path 需是一个路径!')
try:
print(os.listdir(Path))
except WindowsError:
print('路径错误!')
```
- 序列化:把变量从内存中变成可存储或传输的过程称之为序列化,在Python中叫pickling,在其他语言中也被称之为serialization,marshalling,flattening等等,都是一个意思。
- 反序列化:把变量内容从序列化的对象重新读到内存里称之为反序列化,即unpickling。
- Python提供了
pickle
模块来实现序列化代码:
```PYTHON
# 序列化
import pickle
d = dict(name='X.Tang',age=20,score=99) # dict
pdumps = pickle.dumps(d) # pickle.dumps(字典) pickle.dumps()方法把任意对象序列化成一个bytes,然后,就可以把这个bytes写入文件
print(pdumps) # 输出 b'\x80\x03}q\x00(X\x04\x00\x00\x00nameq\x01X\x06\x00\x00\x00X.Tangq\x02X\x03\x00\x00\x00ageq\x03K\x14X\x05\x00\x00\x00scoreq\x04Kcu.'# pickle.dump()直接把对象序列化后写入一个file-like Object
with open('dump.txt','wb') as f: # wb 写2进制文件
pickle.dump(d,f)# 要把对象从磁盘读到内存时,可以先把内容读到一个bytes,然后用pickle.loads()方法反序列化出对象 pickle.load()
with open('dump.txt','rb') as f:
d1 = pickle.load(f)
print(d1) # 这个变量和原来的变量是完全不相干的对象,它们只是内容相同而已# json
import json
d = dict(name='X.Tang',age=18,score=66)
# 转换成json
jd = json.dumps(d)
print(jd,type(jd))
"""
dump()方法可以直接把JSON写入一个file-like Object。
要把JSON反序列化为Python对象,用loads()或者对应的load()方法,
前者把JSON的字符串反序列化,后者从file-like Object中读取字符串并反序列化:
"""
```