Python基础十七:IO编程二:操作目录
Python基础系列内容为学习廖雪峰老师Python3教程的记录,廖雪峰老师官网地址:廖雪峰Python3教程
Author:yooongchun
Email:yooongchun@foxmail.com
os
模块:Python提供了os
模块来支持对文件的操作,下面列举部分比较常见的操作- 获取系统类型
import os print(os.name) # 输出结果 # nt # [Finished in 0.2s]
os.name
会获取系统的类型,nt
代表的是Windows系统,而posix
代表Linux
Unix
或者Mac OS X
- 获取环境变量
import os print(os.environ) # 输出结果 environ({'COMMONPROGRAMFILES(X86)': 'C:\Program Files (x86)\Common Files', 'PROMPT': '$P$G', 'PYTHONIOENCODING': 'utf-8', ...}) [Finished in 0.2s]
系统的环境变量都会储存在这个变量中,如果要获取某个变量的值,可以调用方法:
os.environ.get()
方法:import os print(os.environ.get("Path")) # 输出结果 C:UsersfanyuAnaconda3Libraryin;C:ProgramDataOracleJavajavapath;C:Program FilesMicrosoft SQL Server130ToolsBinn;.... [Finished in 0.1s]
- 创建文件或目录
import os parent=os.path.abspath(".")#获取当前路径的绝对路径地址 print(parent)# 输出当前路径绝对路径 new_folder_path=os.path.join(parent,'testdir')# 新的文件夹绝对路径 print(new_folder_path) flag=os.path.isdir(new_folder_path) # 判断是否存在该目录 print(str(flag)) os.mkdir(new_folder_path) # 创建该目录 flag=os.path.isdir(new_folder_path) # 判断创建的目录是否存在 print(str(flag)) os.rmdir(new_folder_path) # 移除目录 flag=os.path.isdir(new_folder_path) # print(flag)
输出结果:
D:dataschoolworkcode D:dataschoolworkcode estdir False True False [Finished in 0.2s]
我们来分析上面的代码:
首先程序获取当前目录的绝对路径并打印出来:
D:dataschoolworkcode
接下来程序使用
os.path.join()
函数拼接出一个新的地址:D:dataschoolworkcode estdir
然后用
os.path.isdir()
来判断该目录是否存在:False
紧接着程序创建了该目录:
os.mkdir(new_folder_path) # 创建该目录
再判断其是否存在:True
最后程序移除了该目录:
os.rmdir(new_folder_path) # 移除目录
这里要说明几个函数,能够方便程序开发
os.path.split()
:这个函数能将一个路径按照系统的不同将路径划分为两个部分,一个是其父路径,另一个为其文件名全称os.path.splitext()
:这个函数能把一个路径按照后缀分开import os path="C:/users/fanyu/desktop/test.txt" print("split result: ",os.path.split(path)) print("splitext result: ",os.path.splitext(path)) # 输出结果 split result: ('C:/users/fanyu/desktop', 'test.txt') splitext result: ('C:/users/fanyu/desktop/test', '.txt') [Finished in 0.1s]
os.path.join()
:该函数能根据系统的不同将路径拼接起来import os path=os.path.join("c:/users/fanyu/desktop",'test.txt') print(path) # 结果 c:/users/fanyu/desktop est.txt [Finished in 0.1s]
os.rename()
:对文件重命名os.remove()
: 删除文件由于
os
模块所提供的函数都是对系统封装的调用,因而如果某功能,比如文件复制,没有相应的系统调用的话os
模块也就没有相应的函数,基于此,Python提供了shutil
模块来作为os
模块的补充,来提供一些别的文件操作相关的函数,比如复制文件shutil.copyfile
比如删除非空目录shutil.rmtree
等
序列化:把变量从内存中变成可存储或传输的过程称之为序列化,在Python中叫
pickling
,在其他语言中也被称之为serialization
,marshalling
,flattening
等等,都是一个意思。序列化之后,就可以把序列化后的内容写入磁盘,或者通过网络传输到别的机器上。反过来,把变量内容从序列化的对象重新读到内存里称之为反序列化,即unpickling
。Python提供了pickle
模块来进行序列化操作pickle.dumps()
:序列化操作
import pickle d=dict(name='Lisa',score=100,age=20) print(pickle.dumps(d)) # 输出结果: b'x80x03}qx00(Xx04x00x00x00nameqx01Xx04x00x00x00Lisaqx02Xx05x00x00x00scoreqx03KdXx03x00x00x00ageqx04Kx14u.' [Finished in 0.2s]
可以看到该函数将一根
dict
对象序列化为了二进制的数据(这里显示为16进制)pickle.dump()
:将对象序列化后保存为文件
import pickle d=dict(name='Lisa',score=100,age=20) f=open("test.txt","wb") pickle.dump(d,f) f.close()
pickle.load()
: 反序列化:将序列从文件还原
import pickle f=open("test.txt","rb") print(pickle.load(f)) f.close() #结果 {'name': 'Lisa', 'score': 100, 'age': 20} [Finished in 0.2s]
可见变量又被加载回来了。另外值得提起的时是,这种序列化是高度依赖语言甚至是语言版本的,可能不同版本的Python序列化的结果都不一样,鉴于此,有为了跨平台,多兼容的序列化标准:比如
json
xml
等。但更好的方法是序列化为json
,因为json
表示出来就是一个字符串,可以被所有语言读取,也可以方便地存储到磁盘或者通过网络传输。json
不仅是标准格式,并且比xml
更快,而且可以直接在Web
页面中读取,非常方便。json
:使用json
进行序列化也非常方便import json d={"name":"Lisa","sroce":99,"age":20,"gender":"female"} print(json.dumps(d)) #结果 {"name": "Lisa", "sroce": 99, "age": 20, "gender": "female"} [Finished in 0.2s]
加载同样也很方便:
import json d={"name":"Lisa","sroce":99,"age":20,"gender":"female"} json_str=json.dumps(d) dd=json.loads(json_str) print(dd) {'name': 'Lisa', 'sroce': 99, 'age': 20, 'gender': 'female'} [Finished in 0.2s]