设为首页 加入收藏

TOP

21、常用模块(二)
2017-09-30 17:02:45 】 浏览:5600
Tags:常用 模块
e1
') 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推 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.popen("bash command) 运行shell命令,获取执行结果 os.environ 获取系统环境变量 os.path 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所指向的文件或者目录的最后修改时间 os.path.getsize(path) 返回path的大小

注意:os.stat('path/filename' 获取文件/目录信息 的结构说明

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)是创建时间(详细信息参见平台的文档)。
stat 结构

 

五、序列化模块

什么叫序列化——将原本的字典、列表等内容转换成一个字符串的过程就叫做序列化

提到转换我们就会想到一个内置函数eva l(),这么强大的函数我们为什么不建议大家用呢?eva l()可以将字符串str当成有效的表达式来求值并返回计算结果。这么强大的功能使它有一个致命的缺点:安全性。如果我们从文件中读出的不是一个数据结构,而是一句具有破坏性的语句,那么后果实在不堪设设想。而使用eva l就要担这个风险。

序列化的目的

1、以某种存储形式使自定义对象持久化

2、将对象从一个地方传递到另一个地方。

3、使程序更具维护性。

1、json模块

Json模块提供了四个功能:dumps、dump、loads、load:

d = {'1':{'k':[1,2,3,4]}}
s = str(d)
print(s,type(s))
print(eva l(s),type(eva l(s)))  #不安全

import json
#序列化  将d转换为字符串
#json转换完的字符串类型的字典中的字符串是由""表示的
ret_s = json.dumps(d)
print(ret_s,type(ret_s))

#反序列化  将字符串格式的字典转换成一个字典
ret_d = json.loads(ret_s)
print(ret_d,type(ret_d))


f = open('json_file','w')
dic = {'k1':'v1','k2':'v2','k3':'v3'}
#可以直接接收句柄操作
json.dump(dic,f)
# f.write(json.dumps(dic))
f.close()

f = open('json_file')
#可以直接接收句柄操作
dic2 = json.load(f)
print(dic2,type(dic2))
f.close()
方法简介

2、pickle模块

和json区别:你序列化的内容如果是列表或者字典,使用json模块。但如果序列化其他的数据类型,而未来你还会用python对这个数据进行反序列化的话,那么就可以使用pickle。如果是使用json序列化的其他语言可以使用,pickle不可以。

pickle模块提供了四个功能:dumps、dump、loads、load:

import pickle

tu = {1,2,3,4}
pik_b = pickle.dumps(tu)
print(pik_b)  #二进制内容
print(pickle.loads(pik_b))  #集合

#其它两个方法的区别和json一样也是可以直接操作句柄
方法简介

3、shelve模块

shelve只提供给我们一个open方法,是用key来访问的,使用起来和字典类似。

import shelve
f = shelve.open('shelve_file')
f['key'] = {'int':10, 'float':9.5, 'string':'Sample data'}  #直接对文件句柄操作,就可以存入数据
f.close()

f1 = shelve.open('shelve_file')
f1['key']['str'] = 'Sample'
#取出数据的时候也只需要直接用key获取即可,但是
首页 上一页 1 2 3 下一页 尾页 2/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇一些轮询操作 下一篇Python-Day1编写登陆接口

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目