今天我们继续来看模块的那些事儿

一.os模块

  所有和操作系统相关内容都在os模块

  1. os.makedirs('dirname1/dirname2') 可生成多层递归目录
  2. os.removedirs('dirname1') 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,以此类推
  3. os.mkdir('dirname') 生成单级目录;相当于shellmkdir dirname
  4. os.rmdir('dirname') 删除单级空目录,若目录不为空则无法删除,报错;相当于shellrmdir dirname
  5. os.listdir('dirname') 列出指定目录下的所有文件和目录,包括隐藏文件,并以列表方式打印
  6. os.remove() 删除一个文件
  7. os.rename('oldname','newname') 重命名文件/目录
  8. os.stat('path/filename') 获取文件/目录信息
  9. os.system('bash command') 运行shell命令,直接显示
  10. os.popen('bash command').read() 运行shell命令,获取执行结果
  11. os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径
  12. os.chdir('dirname') 改变当前脚本工作目录;相当于shellcd
  13.  
  14. #os.path
  15. os.path.abspath(path) 返回path规范化的绝对路径
  16. os.path.split(path) path分割成目录和文件名二元组返回
  17. os.path.dirname(path) 返回path的目录,其实就是os.path.split(path) 的第一个元素
  18. os.path.basename(path) 返回path最后的文件名,如何path以/或\结尾,那么就返回空值,即os.path.split(path)的第二个元素
  19. os.path.exists(path) 如果path存在,返回True;如果path不存在,返回False
  20. os.path.isabs(path) 如果path是绝对路径,返回True
  21. os.path.isfile(path) 如果path是一个存在的文件,则返回True,否则返回False
  22. os.path.isdir(path) 如果path是一个存在的目录,则返回True,否则返回False
  23. os.pathjoin(path1[,path2[,...]]) 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
  24. os.path.getatime(path) 返回path所指向的文件或者目录的最后访问时间
  25. os.path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间
  26. os.path.getsize(path) 返回path的大小
  27.  
  28. #特殊属性
  29. os.sep 输出操作系统特定的路径分隔符,win下为'\\',Linux下为'/'
  30. os.linesep 输出当前平台使用的行为终止符,win下为'\r\n',Linux'\n'
  31. os.pathsep 输出用于分割文件路径的字符串 win下为;,Linux下为:
  32. os.name 输出字符串指示当前使用平台,win -> 'nt' ; Linux -> 'posix'

  os.stat() 属性解读:

  1. stat结构:
  2.  
  3. st_mode:inode保护模式
  4. st_ino:inode 节点号
  5. st_dev:inode 驻留的设备
  6. st_nlink: inode 的链接数
  7. st_uid:所有者的用户ID
  8. st_gid:所有者的组ID
  9. st_size: 普通文件以字节为单位的大小;包含等待某些特殊文件的数据
  10. st_atime:上次访问的时间
  11. st_mtime:最后一次修改的时间
  12. st_ctime:由操作系统报告的'ctime',在某些系统上(如Unix)是最新的元数据更改的时间,在其他系统上(如Windows) 是创建时间(详细信息参见平台的文档)

二.sys模块

  所有和python解释器相关的都在sys模块

  1. sys.argv 命令行参数list,第一个元素是程序本身路径
  2. sys.exit(n) 退出程序,正常退出时exit(0),错误退出sys.exit(1)
  3. sys.version 获取python解释程序的版本信息
  4. sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量值
  5. sys.platform 返回操作系统平台名称

三.序列化

  在我们存储数据或者网络传输数据的时候,需要对我们的对象进行处理,把对象处理成方便存储和传输的数据格式,这个过程叫序列化,不同的序列化结果也不同,但是目的是一样的,都是为了存储和传输

  在python中存在两种序列化大方案:

    1.pickle,可以将我们Python中的任意数据类型转化成bytes并写入文件中,同样也可以把文件中写好的bytes转换回我们python的数据,这个过程被称为反序列化

    2.json,将python中常见的字典,列表转化成 字符串,是目前前后端数据交互使用频率最高的一种数据格式.

四.pickle(重点)

  pickle用起来很简单,说白了就是把我们的python对象写入到文件中的一种解决方案,但是写入到文件的是bytes,所以这东西不是给人看的,是给机器看到

  1. import pickle
  2.  
  3. class Cat:
  4. def __init__(self,name,age):
  5. self.name = name
  6. self.age = age
  7. def catchMouse(self):
  8. print(self.name,'抓老鼠')
  9. c = Cat('jerry',18)
  10.  
  11. bs = pickle.dumps(c) #序列化一个对象
  12. print(bs) #一堆二进制,看不懂
  13.  
  14. cc = pickle.loads(bs) #把二进制反序列化成我们的对象
  15. cc.catchMouse() #猫依然是猫,还可以抓老鼠

  pickle中的dumps可以序列化一个对象,loads可以反序列化一个对象,我们使用dump还可以直接把一个对象写入到文件中

  1. #f = open('cat',mode = 'wb')
  2. #pickle.dump(c,f) #写入到文件中
  3. #f.close()
  4.  
  5. f = open('cat',mode = 'rb')
  6. cc = pickle.load(f) #从文件中读取对象
  7. cc.catchMouse()

  pickle还支持多个对象的写出:

  1. lst = [Cat('jerry',19),Cat('tommy',20),Cat('alpha',21)]
  2.  
  3. f = open('cat',mode = 'wb')
  4. for el in lst:
  5. pickle.dump(el,f) #写入到文件中
  6. f.close()
  7.  
  8. f = open('cat',mode = 'rb')
  9. for i in range(len(lst)):
  10. cc = pickle.load(f) #从文件中读取对象
  11. cc.catchMouse()

  但是这样写并不够好,因为读的时候并不能知道有多少对象要读,这里记住,不能一行一行的读,那真的要写入或者读取多个内容怎么办?很简单,装列表里,然后读取和写入都用列表

  1. lst = [Cat('jerry',19),Cat('tommy',20),Cat('alpha',21)]
  2.  
  3. f = open('cat',mode = 'wb')
  4. pickle.dump(lst,f)
  5.  
  6. f = open('cat',mode = 'rb')
  7. l1 = pickle.load(f)
  8. for el in l1:
  9. el.catchMouse()

  记住一点,pickle序列化的内容是二进制的内容(bytes)不是给人看的

五.json(重点)

  终于到json了,json是我们前后端交互的枢纽,相当于编程界的普通话,大家沟通都用json,为什么这样呢?因为json的语法格式可以完美的表示出一个对象,那什么是json:json全称javascript object notation,翻译过来叫js对象简谱,很复杂是吧.来上一段我们认识的代码:

  1. wf = {
  2. 'name':'汪峰',
  3. 'age':18,
  4. 'hobby':'上头条',
  5. 'wife':{
  6. 'name':'子怡',
  7. 'age':19,
  8. 'hobby':['唱歌','跳舞','演戏']
  9. }
  10. }

  这个不是字典么?对的,在Python里这玩意叫字典,但是在javascript里这东西叫json,一模一样的,我们发现用这样的数据结构可以完美的表示出任何对象,并且可以完整的把对象表示出来,只要代码格式比较好,那可读性也是很强的,所以大家公认用这样一种数据结构作为数据交互的格式,那这个鬼东西之前是什么呢?XML...来看一段代码:

  1. <?xml version="1.0" encoding="utf-8" ?>
  2. <wf>
  3. <name>汪峰</name>
  4. <age>18</age>
  5. <hobby>上头条</hobby>
  6. <wife>
  7. <name>⼦怡</name>
  8. <age>18</age>
  9. <hobbies>
  10. <hobby>唱歌</hobby>
  11. <hobby>跳舞</hobby>
  12. <hobby>演戏</hobby>
  13. </hobbies>
  14. </wife>
  15.  
  16. </wf>

  古人(老程序员)都是用这样的数据进行传输的,先不管这个东西好不好看,这玩意想要解析.. 那简直了. 想死的心都有,所以老版本的xml在维护和处理上是非常复杂和繁琐的,多说一嘴, 就是因为这个鬼东西太难解析,以前的项目几乎没有用ajax的.

  OK,那json既然这么牛B好用, 怎么用呢? 注意,这里又出来一个新问题,我们的程序是在python里写的,但是前端是在JS那边来解析json的,所以,我们需要把我们程序产生的字典转化成json格式的json串(字符串),然后网络传输,那边接收到了之后,它爱怎么处理是它的事情. 那如何把字典转化成我们的json格式的字符串呢?很简单, 上代码:

  1. import json
  2. dic = {'a':'女王','b':'萝莉','c':'小清新'}
  3. s = json.dumps(dic) #把字典转化成json字符串
  4. print(s) #{"a": "\u5973\u738b", "b": "\u841d\u8389", "c": "\u5c0f\u6e05\u65b0"}

  结果不友好啊,那如何处理中文呢?在dumps的时候给出另一个参数ensure_ascii = False就可以了

  1. import json
  2. dic = {'a':'女王','b':'萝莉','c':'小清新'}
  3. s = json.dumps(dic,ensure_ascii = False) #把字典转化成json字符串
  4. print(s) #{"a": "女王", "b": "萝莉", "c": "小清新"}

  搞定了,接下来,前端给你传递信息了,你要把前端传递过来的json字符串转化成字典

  1. import json
  2.  
  3. s = '{'a':'女王','b':'萝莉','c':'小清新'}'
  4. dic = json.loads(s)
  5. print(type(dic),dic)

  搞定,是不是很简单,以上两个代码要求记住,理解,背会

  json也可以像pickle一样把序列化的结果写入到文件中

  1. dic = {'a':'女王','b':'萝莉','c':'小清新'}
  2. f = open('test.json',mode = 'w',encoding = 'utf-8')
  3. json.dump(dic,f,ensure_ascii = False) #把对象打散成json写入到文件中
  4. f.close()

  同样也可以从文件中读取一个json

  1. f = open('test.json',mode = 'r',encoding = 'utf-8')
  2. dic = json.load(f)
  3. f.close()
  4. print(dic)

  注意,我们可以向同一个文件中写入多个json串,但是读不行

  1. import json
  2.  
  3. lst = [{'a':1},{'b':2},{'c':3}]
  4.  
  5. f = open('test.json',mode = 'w',encoding = 'utf-8')
  6.  
  7. for el in lst:
  8. json.dump(el,f)
  9. f.close()

  注意,此时文件中的内容是一行内容

  1. {"a": 1}{"b": 2}{"c": 3}

  这在读取的时候是无法正常读取的,那如何解决呢?两套方案,方案一:把所有的内容准备好统一进行写入和读取,但是这样处理如果数据小还好,数据量大的话就不够友好了,方案二:不用dump,改用dumps和loads,对每一行分别进行处理

  1. import json
  2.  
  3. lst = [{'a':1},{'b':2},{'c':3}]
  4.  
  5. #写入
  6. f = open('test.json',mode = 'w',encoding = 'utf-8')
  7. for el in lst:
  8. s = json.dumps(el,ensure_ascii = True) + '\n'
  9. f.write(s)
  10. f.close()
  11.  
  12. #读取
  13. f = open('test.json',mode = 'r',encoding = 'utf-8')
  14. for line in f:
  15. dic = json.loads(line.strip())
  16. print(dic)
  17. f.close()

  

Python-常用模块2的更多相关文章

  1. Python常用模块之sys

    Python常用模块之sys sys模块提供了一系列有关Python运行环境的变量和函数. 常见用法 sys.argv 可以用sys.argv获取当前正在执行的命令行参数的参数列表(list). 变量 ...

  2. Python常用模块中常用内置函数的具体介绍

    Python作为计算机语言中常用的语言,它具有十分强大的功能,但是你知道Python常用模块I的内置模块中常用内置函数都包括哪些具体的函数吗?以下的文章就是对Python常用模块I的内置模块的常用内置 ...

  3. python——常用模块2

    python--常用模块2 1 logging模块 1.1 函数式简单配置 import logging logging.debug("debug message") loggin ...

  4. python——常用模块

    python--常用模块 1 什么是模块: 模块就是py文件 2 import time #导入时间模块 在Python中,通常有这三种方式来表示时间:时间戳.元组(struct_time).格式化的 ...

  5. Python常用模块——目录

    Python常用模块学习 Python模块和包 Python常用模块time & datetime &random 模块 Python常用模块os & sys & sh ...

  6. python 常用模块之random,os,sys 模块

    python 常用模块random,os,sys 模块 python全栈开发OS模块,Random模块,sys模块 OS模块 os模块是与操作系统交互的一个接口,常见的函数以及用法见一下代码: #OS ...

  7. python常用模块之时间模块

    python常用模块之时间模块 python全栈开发时间模块 上次的博客link:http://futuretechx.com/python-collections/ 接着上次的继续学习: 时间模块 ...

  8. python常用模块之subprocess

    python常用模块之subprocess python2有个模块commands,执行命令的模块,在python3中已经废弃,使用subprocess模块来替代commands. 介绍一下:comm ...

  9. python常用模块之string

    python常用模块string模块,该模块可以帮我们获取字母.数字.特殊符号. import string #打印所有的小写字母 print(string.ascii_lowercase) #打印所 ...

  10. python常用模块-调用系统命令模块(subprocess)

    python常用模块-调用系统命令模块(subprocess) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. subproces基本上就是为了取代os.system和os.spaw ...

随机推荐

  1. Maven环境下面多项目之间的引用

    如图: https://github.com/sdl/odata-example  sdl OData例子包含了4个项目,下载到本地后编译.发现只有model项目是可以编译过去了.其他几个暂时编译不过 ...

  2. windows下hla编译环境配置(转)

    原文地址:http://blog.chinaunix.net/uid-20548989-id-1667169.html HLA简介         HLA,英文"High Level Ass ...

  3. $bzoj1016-JSOI2008$ 最小生成树计数 最小生成树 $dfs/matrix-tree$定理

    题面描述 现在给出了一个简单无向加权图.你不满足于求出这个图的最小生成树,而希望知道这个图中有多少个不同的最小生成树.(如果两颗最小生成树中至少有一条边不同,则这两个最小生成树就是不同的).由于不同的 ...

  4. 《大数据日知录》读书笔记-ch11大规模批处理系统

    MapReduce: 计算模型: 实例1:单词统计 实例2:链接反转 实例3:页面点击统计 系统架构: 在Map阶段还可以执行可选的Combiner操作,类似于Reduce,但是在Mapper sid ...

  5. 后缀自动机 && 题目

    因为明天要讲解后缀自动机了,所以只能抱抱佛脚,临时做做题目.其实很久以前看过,但是不太懂,看的是clj的原文,不太懂.现在只能临时看看是怎么弄的,应付下. ---------------------- ...

  6. Oracle系统表整理 --sql

    -- DBA/ALL/USER/V_$/GV_$/SESSION/INDEX开头的绝大部分都是视图-- DBA_TABLES意为DBA拥有的或可以访问的所有的关系表.-- ALL_TABLES意为某一 ...

  7. JWT(Json Web Token)初探与实践

    前言什么是JWT?为什么使用JWT?什么时候使用JWT?JWT的基本结构HeaderPayloadSignature将他们放在一起项目实践JWT后端前端关于安全性总结参考 协议标准:https://t ...

  8. Jmeter基础元件

    测试计划 1.Test Plan (测试计划) 用来描述一个性能测试,包含与本次性能测试所有相关的功能.也就说JMeter创建性能测试的所有内容是于基于一个计划的. 下面看看一个计划下面都有哪些功能模 ...

  9. selenium+Python(Page Object 设计模式实例)

    以下实例演示了采用了page Object设计模式的方式登录qq空间: 1.创建基础类page:在初始方法__init__()定义驱动的(driver),基本url(base_url)和超时时间(ti ...

  10. selenium+JDBC实现参数自动化测试

    测试模拟环境:在www.1905.com网站中执行两个用户的登陆退出操作 需要的文件有: 1.User的实例类: public class User { private String username ...