一、os模块
os模块提供了很多允许你的程序与操作系统直接交互的功能。
os.getcwd() : 得到当前的工作目录,即当前Python脚本工作的目录路径 os.listdir() : 返回指定目录下的所有文件和目录名 os.remove() : 函数用来删除一个文件 os.removedirs(r"c:\python") :删除多个目录 os.path.isfile() :检测给出的路径是否是一个文件 os.path.isdir():检验给出的路径是否是一个目录 os.path.isabs():检验给出的路径是否是绝对路径 os.path.exists():检验给出的路径是否存在 os.path.split():返回一个路径的目录名和文件名 os.path.splitext():分离扩展名 os.path.dirname():获取路径名 os.path.abspath():获取绝对路径 os.path.basename():获取文件名 os.system():运行shell命令 os.getenv("HOME"):读取操作系统环境变量HOME的值 os.environ:返回操作系统所有的环境变量。相当于env命令 os.environ.setdefault('HOME','/home/alex'):设置系统环境变量,仅程序运行时有效 os.linesep:输出当前平台的行终止符。Windows使用/r/n,Linux和Mac使用/n os.name:指示你正在使用的平台。nt表示Windows os.rename(old,new):重命名 os.makedirs(r"c:\python\test"):创建多级目录 os.mkdir("test"):创建单个目录 os.stat(file):获取文件属性 os.chmod(file):修改文件权限与时间戳 ##os.exit():终止当前进程 os.path.getsize(filename):获取文件大小 os.path.join(dir,filename) :结合目录名和文件名 os.chdir(dirname):切换目录到dirname os.get_terminal_size:获取当前终(窗口)端的大小 os.kill(1000,signal.SIGKILL):杀死进程。import signal >>> import os >>> os.getcwd() 'G:\\myProject' >>> os.listdir() ['.idea', 'python', '第一模块章节2', '第二模块章节1', '第二模块章节2'] >>> os.system('ping baidu.com') ���� Ping baidu.com [111.13.101.208] ���� 32 �ֽڵ�����: ���� 111.13.101.208 �Ļظ�: �ֽ�=32 ʱ��=28ms TTL=54 >>> os.linesep '\r\n' >>> os.name 'nt' >>> os.stat('python') os.stat_result(st_mode=16895, st_ino=562949953421355, st_dev=2625128013, st_nlink=1, st_uid=0, st_gid=0, st_size=0, st_atime=1518417380, st_mtime=1518417380, st_ctime=1517384433) >>> os.path.join('root','test','t.py') 'root\\test\\t.py' >>> os.getcwd() 'G:\\myProject'
二、sys模块
sys.argv():传入脚本参数 sys.exit(n):退出程序,正常退出时exit(0) sys.version:获取Python解释程序的版本信息 >>> sys.version '3.6.4 (v3.6.4:d48eceb, Dec 19 2017, 06:04:45) [MSC v.1900 32 bit (Intel)]' >>>sys.maxsize #最大的int值 2147483647 >>> sys.platform #返回操作系统平台名称 'win32' >>> sys.path #返回模块的搜索路径,初始化时使用Python,path环境变量的值。 ['C:\\Program Files\\JetBrains\\PyCharm 2017.3.4\\helpers\\pydev', 'C:\\Program Files\\JetBrains\\PyCharm 2017.3.4\\helpers\\pydev', >>> sys.stdin.read() #从屏幕读取多行?? >? hey 'hey\n' >>> sys.stdin.readline() #从屏幕读取一行 >? hey 'hey\n' >>>sys.getrecursionlimit() #查看递归层数 1000 >>> sys.setrecursionlimit(1200) #设置递归层数 >>> sys.getrecursionlimit() 1200 >>> sys.getfilesystemencoding() #获取内存数据存到文件里的默认编码 'utf-8'
三、shutil模块
高级的文件、文件夹、压缩包处理模块
shutil.copyfileobj(fsrc,fdst[,length])
将文件内容拷贝到另一个文件中,可以部分内容


import shutil f1 = open('常用模块.py','r') f2 = open('changyongmokuai.py','w') shutil.copyfileobj(f1,f2)
shutil.copyfile(src,dst)
拷贝文件
shutil.copymode(src,dst)
仅拷贝权限。内容、组、用户均不变
shutil.copystat(src,dst)
拷贝状态的信息。包括:mode bits,atime,mtime,flags
shutil.copy(src,dst)
拷贝文件和权限
shutil.copy2(src,dst)
拷贝文件和权限
shutil.ignore_patterns(*patterns)
shutil.copytree(src,dst,symlinks=False,ignore=None)
递归地去拷贝文件。不拷贝软连接,ignore指定文件
如:shutil.copytree("packages","pack3",ignore=shutil.ignore_patterns("__init__.py","view.py"))


import shutil shutil.copytree('packages','pack')
shutil.rmtree(path[,ignore_errors[,onerror]])
递归的删除文件
shutil.move(src,dst)
递归的移动文件
shutil.make_archive(base_name,format,...)
创建压缩包并返回文件路径,例如:zip、tar
- base_name:压缩包的文件名,也可以是压缩包的路径。只是文件名时,则保存至当前目录
- format:压缩包种类,"zip","tar"
- root_dir:要压缩的文件夹路径(默认当前路径)
- owner:用户,默认当前用户
- group:组,默认当前组
- logger:用于记录日志,通常是logging.Logger对象


1 #将 /Users/wupeiqi/Downloads/test 下的文件打包放置当前程序目录 2 3 import shutil 4 ret = shutil.make_archive("wwwwwwwwww", 'gztar', root_dir='/Users/wupeiqi/Downloads/test') 5 6 7 #将 /Users/wupeiqi/Downloads/test 下的文件打包放置 /Users/wupeiqi/目录 8 import shutil 9 ret = shutil.make_archive("/Users/wupeiqi/wwwwwwwwww", 'gztar', root_dir='/Users/wupeiqi/Downloads/test')
shutil对压缩包的处理是调用ZipFile和TarFile两个模块来进行的。


import zipfile # 压缩 z = zipfile.ZipFile('laxi.zip', 'w') z.write('a.log') z.write('data.data') z.close() # 解压 z = zipfile.ZipFile('laxi.zip', 'r') z.extractall() z.close()


import tarfile # 打包 tar = tarfile.open('your.tar','w') tar.add('/Users/wupeiqi/PycharmProjects/bbs2.zip', arcname='bbs2.zip') tar.add('/Users/wupeiqi/PycharmProjects/cmdb.zip', arcname='cmdb.zip') tar.close() # 解压 tar = tarfile.open('your.tar','r') tar.extractall() # 可设置解压地址 tar.close()
四、序列化
4.1 json
- 序列化:序列化是指将内存中的数据类型转化成字符串,以使其能存储到硬盘或者通过网络传输到远程。因为硬盘存储和网络传输只能接受bytes。
json四个方法:
dump:序列化并写入文件
dumps:只是序列化存在内存中
load:反序列化从内存中取出
loads:只是反序列化
import json data = { 'roles':[{'role':"monster"},{'role':'hero'}] } d = json.dumps(data) #仅序列化 print(d) d2 = json.loads(d) print(d2) f = open('json_file.json','w') d = json.dump(data,f) #序列化并存储到文件 f = open('json_file.json','r') d2 = json.load(f) print(d2)
- 只是把数据类型转化成字符串存到内存里的意义?
- 把你的内存数据通过网络共享给远程的其他人
- 定义了不同语言的之间的交互规则:
- 纯文本:缺点,不能共享复杂的数据类型
- XML:缺点,占空间大
- json:简单,可读性好
4.2 pickle
pickle的用法和json完全相同
json仅支持:str int tuple list dict 数据类型
pickle:支持Python里的所有数据类型。但是只能在Python里使用。
4.3 shelve
允许多次dump和load
shellve对pickle进行封装
#_*_coding:utf-8_*_ import shelve f = shelve.open('shelve.test') #打开一个文件 names = ['pang','chao','cheng'] info = {'name':'alex','age':'22'} f['names'] = names #持久化列表 f['new_dic'] = info f.close() #关闭文件 f = shelve.open('shelve.test') #再次打开 print(f.items()) print(list(f.keys())) print(list(f.items())) print(f.get('names')) #get方法 print(f['names'][0]) #按索引取值 f['names'] = 'shen' #修改直接整个赋值 f.close() f = shelve.open('shelve.test') print(f['names'])
五、xml模块
xml是实现不同语言或程序之间进行数据交换的协议。跟json差不多,但json使用起来更简单。至今还有很多传统公司的接口还是xml。
xml的格式如下,就是通过<>节点来区别数据结构的。
import xml.etree.ElementTree as ET tree = ET.parse('xml test') #open root = tree.getroot() #f.seek(0),root-->data print(root.tag) #遍历xml文档 print(dir(root)) for child in root: #child-->country 子节点 # print(child) print('----',child.tag,child.attrib) #子节点的tag attib for i in child: # country下的子节点 print(i.tag,i.text) #修改 for node in root.iter('year'): #data.iter print(node.text) #year.text new_year = int(node.text) + 1 node.text = str(new_year) node.set('update','yes') tree.write('xml test') #删除node for country in root.findall('country'): rank = int(country.find('rank').text) if rank > 50: root.remove(country) tree.write('output.xml')