os模块提供了不少容许你的程序与操做系统直接交互的功能。node
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.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'
高级的文件、文件夹、压缩包处理模块python
shutil.copyfileobj(fsrc,fdst[,length])shell
将文件内容拷贝到另外一个文件中,能够部份内容json
import shutil f1 = open('经常使用模块.py','r') f2 = open('changyongmokuai.py','w') shutil.copyfileobj(f1,f2)
shutil.copyfile(src,dst)网络
拷贝文件数据结构
shutil.copymode(src,dst)ide
仅拷贝权限。内容、组、用户均不变函数
shutil.copystat(src,dst)ui
拷贝状态的信息。包括: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
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()
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)
pickle的用法和json彻底相同
json仅支持:str int tuple list dict 数据类型
pickle:支持Python里的全部数据类型。可是只能在Python里使用。
容许屡次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是实现不一样语言或程序之间进行数据交换的协议。跟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')