python学习篇之【os、sys、json】模块
一、os模块
os模块是与操作系统交互的一个接口
os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname") 改变当前脚本工作目录;相当于shell下cd os.curdir 返回当前目录: ('.') os.pardir 获取当前目录的父目录字符串名:('..') os.makedirs('dirname1/dirname2') 可生成多层递归目录 os.removedirs('dirname1') 若目录为空,则删除,并递归到上一级目 录,如若也为空,则删除,依此类推 os.mkdir('dirname') 生成单级目录;相当于shell中mkdir dirname os.rmdir('dirname') 删除单级空目录,若目录不为空则无法删除,报 错;相当于shell中rmdir dirname os.listdir('dirname') 列出指定目录下的所有文件和子目录,包括隐藏文 件,并以列表方式打印 os.remove() 删除一个文件 os.rename("oldname","newname") 重命名文件/目录 os.stat('path/filename') 获取文件/目录信息 os.sep 输出操作系统特定的路径分隔符,win下为"\\",Linux下为"/" os.linesep 输出当前平台使用的行终止符,win下为"\t\n",Linux下 为"\n" os.pathsep 输出用于分割文件路径的字符串 win下为;,Linux下为: os.name 输出字符串指示当前使用平台。win->'nt'; Linux->'posix' os.system("bash command") 运行shell命令,直接显示 os.environ 获取系统环境变量 os.path.abspath(path) 返回path规范化的绝对路径 os.path.split(path) 将path分割成目录和文件名二元组返回 os.path.dirname(path) 返回path的目录。其实就是 os.path.split(path)的第一个元素 os.path.basename(path) 返回path最后的文件名。如何path以/或\结 尾,那么就会返回空值。即os.path.split(path)的第二个元素 os.path.exists(path) 如果path存在,返回True;如果path不存在,返回False os.path.isabs(path) 如果path是绝对路径,返回True os.path.isfile(path) 如果path是一个存在的文件,返回True。否则返回 False os.path.isdir(path) 如果path是一个存在的目录,则返回True。否则返回False os.path.join(path1[, path2[, ...]]) 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略 os.path.getatime(path) 返回path所指向的文件或者目录的最后存取时间 os.path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间
# 1、os.getcwd() # 获取当前工作目录,即当前python脚本的工作路径,如linux的pwda = os.getcwd()print(type(a),a) # 2、os.chdir() # 改变当前脚本工作目录,相当于shell中的 cd命令 os.chdir('C:/Users/雷姆/PycharmProjects/untitled/一、python基础/12、time与random模块') print(os.getcwd()) # 3、os.curdir # 返回当前目录 ('.') print(os.curdir) # 4、os.pardir # 获取当前的目录的父目录字符串名('..') print(os.pardir) # 5、os.mkdirs() # 递归生成多级目录 os.makedirs('file1/file2') # 如果已经创建 则会报错 # 6、os.removedirs() # 若目录为空,则删除,并递归到上一级,如若空,也删除,以此类推。 os.removedirs('file1/file2') # 7、os.mkdir() # 生成单级目录 相当于shell中的 mkdir os.mkdir('wuyu') # 8、os.rmdir() # 删除单级空目录,若目录为空,则删除,不为空则报错 os.rmdir('wuyu') # 9、os.listdir() # 列出指定目录下,所有的文件和子目录,包括隐藏文件。返回一个列表 print(os.listdir('C:/Users/雷姆/PycharmProjects/untitled/一、python基础/12、time与random模块')) # 10、os.remove() # 删除一个文件,注意好路径 # 11、os.rename() # 文件重命名,参数一,原名称。参数二 修改后的名称 # 12、os.stat() # 获取文件/目录信息 print(os.stat('os模块.py')) # 返回值中主要信息 ,注:返回的为时间戳,需要转换为字符串时间。 # st_size: 普通文件以字节为单位的大小;包含等待某些特殊文件的数据。 # st_atime: 上次访问的时间。 # st_mtime: 最后一次修改的时间 # st_ctime: Windows系统上是创建时间。Unix 是最新的元数据更改的时间(详细信息参见平台的文档) 13、os.sep # 输出操作系统的特定分隔符 windows:'\\' linux:/ print(os.sep) 14、os.linesep() # 输出操作系统的行终止符,即回车。win下为/r/n。linux下为/n 15、os.name # 输出字符串打印当前使用平台 win—nt、linux—posix print(os.name) 16、os.system('bash command') # 运行shell 命令,直接显示 os.system('ipconfig') 17、os.environ # 获取系统环境变量 print(os.environ) --------------------------os.path下的方法(对文件路径进行操作)------------------------------------- 1、os.path.abspath(path) # 返回path规范化的绝对路径。 print(os.path.abspath('os模块')) 2、os.path.split(path) # 将传入的文件路径 分为 路径 文件 两个元素 放入元组 print(os.path.split('C:/Users/雷姆/13、os、josn、sys等模块/os模块.py')) 3、os.path.dirname(path) # 实际上拿到的就是 os.path.split 元组里的第一个元素。 print(os.path.dirname('C:/Users/雷姆/13、os、josn、sys等模块/os模块.py')) 4、os.path.basename(path) # 返回path最后的文件名,如果是/ \结尾就会返回空值 print(os.path.basename(' C:/Users/雷姆/PycharmProjects/untitled')) 5、os.path.exists(path) # 如果path存在返回True,不存在返回False print(os.path.exists('E:\PyAnaconda\python.exe')) 6、os.path.isabs(path) # 判断当前路径是否为绝对路径。是 true 否 false print(os.path.isabs('13、os、josn、sys等模块/os模块.py')) 7、os.path.isfile(path) # 如果path 是一个存在的文件,返回True 反之返回False print(os.path.isfile(''E:\PyAnaconda\python.exe')) print(os.path.isfile(''E:\PyAnaconda\')) 8、os.path.isdir(path) # 如果path 是一个目录,返回True,反之返回False print(os.path.isdir('C:/Users/雷姆/PycharmProjects/untitled/一、python基础')) print(os.path.isdir('E:\PyAnaconda\python.exe')) 9、os.path.join() # 拼接路径 详解请见 同级目录下的 os操作实例中 join实例 # 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略 path1 = ' C:/Users/雷姆/PycharmProjects' path2 = 'untitled/一、python基础/13、os、josn、sys等模块' path3 = 'os操作实例/join实例.py' print(path1+path2+path3) print(os.path.join(path1,path2,path3)) 10、os.path.getatime() # 返回最后一次进入此path的时间。 import time print(os.path.getatime('os模块.py')) atime = os.path.getatime('os模块.py') print(time.strftime('%Y-%m-%d-%X',time.localtime(atime))) 11、os.path.getmtime() # 返回path最后目录或文件最后修改时间 import time print(os.path.getmtime('os模块.py')) mtime = os.path.getmtime('os模块.py') print(time.strftime('%Y-%m-%d-%X',time.localtime(mtime)))
批量修改后缀名:
os.chdir('G:\嘿嘿嘿\自己改格式') # 使用chdir 进入文件目录 li = os.listdir() # 拿到所有文件列表,注:如果有多余文件夹,需加判断 os.path.isdir(path) for old_name in li: if old_name.endswith('.vdat'): os.rename(old_name,'%s.avi'%(old_name.rstrip('.vdat')))
join拼接路径:
os.path.join()函数: 连接两个或更多的路径名组件 1.如果各组件名首字母不包含’/’,则函数会自动加上 2.如果有一个组件是一个绝对路径,则在它之前的所有组件均会被舍弃 3.如果最后一个组件为空,则生成的路径以一个’/’分隔符结尾 Demo1 import os Path1 = 'home' Path2 = 'develop' Path3 = 'code' Path10 = Path1 + Path2 + Path3 Path20 = os.path.join(Path1,Path2,Path3) print ('Path10 = ',Path10) print ('Path20 = ',Path20) 输出: Path10 = homedevelopcode Path20 = home\develop\code -------------------------------------------------------------- Demo2 import os Path1 = '/home' Path2 = 'develop' Path3 = 'code' Path10 = Path1 + Path2 + Path3 Path20 = os.path.join(Path1,Path2,Path3) print ('Path10 = ',Path10) print ('Path20 = ',Path20) 输出 Path10 = /homedevelopcode Path20 = /home\develop\code -------------------------------------------------------------- Demo3 import os Path1 = 'home' Path2 = '/develop' Path3 = 'code' Path10 = Path1 + Path2 + Path3 Path20 = os.path.join(Path1,Path2,Path3) print ('Path10 = ',Path10) print ('Path20 = ',Path20) 输出 Path10 = home/developcode Path20 = /develop\code -------------------------------------------------------------- Demo4 import os Path1 = 'home' Path2 = 'develop' Path3 = '/code' Path10 = Path1 + Path2 + Path3 Path20 = os.path.join(Path1,Path2,Path3) print ('Path10 = ',Path10) print ('Path20 = ',Path20 ) 输出 Path10 = homedevelop/code Path20 = /code #常用:添加环境变量 import sys,os BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(BASE_DIR)
二、sys模块
sys模块提供了一系列有关Python运行环境的变量和函数。
sys.argv 命令行参数List,第一个元素是程序本身路径
sys.exit(n) 退出程序,正常退出时exit(0)
sys.version 获取Python解释程序的版本信息
sys.maxint 最大的Int值
sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
sys.platform 返回操作系统平台名称
三、json&pickle
什么是序列化?
我们把对象(变量)从内存中变成可存储或传输的过程称之为序列化,在Python中叫pickling,在其他语言中也被称之为serialization,marshalling,flattening等等,都是一个意思。
序列化之后,就可以把序列化后的内容写入磁盘,或者通过网络传输到别的机器上。
反过来,把变量内容从序列化的对象重新读到内存里称之为反序列化,即unpickling。
json
如果我们要在不同的编程语言之间传递对象,就必须把对象序列化为标准格式,比如XML,但更好的方法是序列化为JSON,因为JSON表示出来就是一个字符串,可以被所有语言读取,也可以方便地存储到磁盘或者通过网络传输。JSON不仅是标准格式,并且比XML更快,而且可以直接在Web页面中读取,非常方便。
JSON表示的对象就是标准的JavaScript语言的对象,JSON和Python内置的数据类型对应如下:

1、dumps与loads:处理非文件数据类型
d = {"1": "a",
"2": "b", }
json_dumps = json.dumps(d) # 序列化:从内存中变成可存储或传输
print(type(json_dumps), json_dumps)
json_loads = json.loads(json_dumps) # 反序列化:把变量内容从序列化的对象重新读到内存里
print(type(json_loads),json_loads)
2、dump与load:处理文件数据类型
d = {"1": "a",
"2": "b", }
with open("a.txt", 'w') as f: j_dump = json.dump(d, f) with open("a.txt") as f: j_load = json.load(f)
3、补充:json不认单引号
import json #dct="{'1':111}"#json 不认单引号 #dct=str({"1":111})#报错,因为生成的数据还是单引号:{'one': 1} dct='{"1":"111"}' print(json.loads(dct)) #conclusion: # 无论数据是怎样创建的,只要满足json格式,就可以json.loads出来,不一定非要dumps的数据才能loads
pickle
与json类似,只不过序列化出来的是二进制;
d = {"1": "a", "2": "b", } p_dumps = pickle.dumps(d) print(type(p_dumps), p_dumps) p_loads = pickle.loads(p_dumps) print(type(p_loads), p_loads)
补充:Pickle的问题和所有其他编程语言特有的序列化问题一样,就是它只能用于Python,并且可能不同版本的Python彼此都不兼容,因此,只能用Pickle保存那些不重要的数据,不能成功地反序列化也没关系。

浙公网安备 33010602011771号