一. os模块

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

二.sys模块

  1. sys.argv 命令行参数List,第一个元素是程序本身路径
  2. sys.exit(n) 退出程序,正常退出时exit(0)
  3. sys.version 获取Python解释程序的版本信息
  4. sys.maxint 最大的Int
  5. sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
  6. sys.platform 返回操作系统平台名称
  7. sys.stdout.write('please:')
  8. val = sys.stdin.readline()[:-1]

三.hashlib模块

  1. import hashlib
  2.  
  3. m = hashlib.md5()
  4. m.update(b"Hello")
  5. m.update(b"It's me")
  6. print(m.digest())
  7. m.update(b"It's been a long time since last time we ...")
  8.  
  9. print(m.digest()) #2进制格式hash
  10. print(len(m.hexdigest())) #16进制格式hash
  11. '''
  12. def digest(self, *args, **kwargs): # real signature unknown
  13. """ Return the digest value as a string of binary data. """
  14. pass
  15.  
  16. def hexdigest(self, *args, **kwargs): # real signature unknown
  17. """ Return the digest value as a string of hexadecimal digits. """
  18. pass
  19.  
  20. '''
  21. import hashlib
  22.  
  23. # ######## md5 ########
  24.  
  25. hash = hashlib.md5()
  26. hash.update(b'admin')
  27. print(hash.hexdigest())
  28.  
  29. # ######## sha1 ########
  30.  
  31. hash = hashlib.sha1()
  32. hash.update(b'admin')
  33. print(hash.hexdigest())
  34.  
  35. # ######## sha256 ########
  36.  
  37. hash = hashlib.sha256()
  38. hash.update(b'admin')
  39. print(hash.hexdigest())
  40.  
  41. # ######## sha384 ########
  42.  
  43. hash = hashlib.sha384()
  44. hash.update(b'admin')
  45. print(hash.hexdigest())
  46.  
  47. # ######## sha512 ########
  48.  
  49. hash = hashlib.sha512()
  50. hash.update(b'admin')
  51. print(hash.hexdigest())

四.json & pickle & shelve

 1.pickle

  1. import pickle
  2.  
  3. data2 = [1,2,3,4]
  4. det_str = pickle.dumps(data2)
  5. print(det_str)
  6.  
  7. #output: 输出为二进制格式
  8. #b'\x80\x03]q\x00(K\x01K\x02K\x03K\x04e.'
  9.  
  10. #将数据序列化后存储到文件中
  11. f = open('test.txt','wb') #pickle只能以二进制格式存储数据到文件
  12. data = {'k1':'python','k2':'java'}
  13. f.write(pickle.dumps(data)) #dumps序列化源数据后写入文件
  14. f.close()
  15.  
  16. #反序列化读取源数据
  17. import pickle
  18. f = open('test.txt','rb')
  19. da = pickle.loads(f.read()) #使用loads反序列化
  20. print(da)

dumps和dump,load和loads的区别:

dumps是将对象序列化

dump是将对象序列化并保存到文件中

loads将序列化字符串反序列化

load将序列化字符串从文件读取并反序列化

  1. import pickle
  2.  
  3. data1 = [1,'a',2,'b',3,'c']
  4. pi = pickle.dumps(data1) #序列化对象
  5. print(pi)
  6. print(pickle.loads(pi)) #反序列化对象
  7.  
  8. f = open('test1.txt','wb')
  9. data2 = ['py','th','on',123]
  10. pickle.dump(data2,f) #序列化对象到文件
  11. f = open('test1.txt','rb')
  12. red = pickle.load(f) #从文件中反序列化对象
  13. print(red)

 2.json

  JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C++、Java、JavaScript、Perl、Python等)。这些特性使JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率)。

json.dump(obj,fp,*,skipkeys = False,ensure_ascii = True,check_circular = True,indent = None,separators = None,default = None,sort_keys = False,** kw)

将obj对象格式化并存储到文件对象中,文件必须为可写的文件句柄,json只产生str对象,不支持bytes对象,所以fp.write()必须支持str输入

skipkeys如果为True,对象的基本类型必须是str,int,float,bool,None

ensure_ascii=True,如果为true则所以传入的非ASCII字符都被转义,如果为false则字符将原样输出

check_circular=True,如果为true容器类型的循环引用检查将被跳过

indent=None,表示数组元素和对象将按指定的值缩进,可以是整数或字符串如'\t'

sort_keys=False,如果为True字典的输出将按键排序

  1. import json
  2.  
  3. data=[{'k1':'v1','k2':'v2'},{'k3':'v3','k4':'k4'},{'k6':'v6','k5':'k5'}]
  4.  
  5. with open('test.txt','w') as pf:
  6. json.dump(data,pf,indent=2,sort_keys=True)
  7. pf.close()
  8.  
  9. #output
  10. [
  11. {
  12. "k1": "v1",
  13. "k2": "v2"
  14. },
  15. {
  16. "k3": "v3",
  17. "k4": "k4"
  18. },
  19. {
  20. "k5": "k5",
  21. "k6": "v6"
  22. }
  23. ]

json.dumps(obj,*,skipkeys = False,ensure_ascii = True,check_circular = True,indent = None,separators = None,default = None,sort_keys = False,** kw)

将obj对象格式化为str对象,参数含义和dump相同

  1. import json
  2. data=[{'k1':'v1','k2':'v2'},{'k3':'v3','k4':'k4'},{'k6':'v6','k5':'k5'}]
  3.  
  4. pi = json.dumps(data,indent=2,sort_keys=True)
  5. print(type(pi))
  6. print(pi)
  7. p2=json.loads(pi)
  8. print(type(p2))
  9. print(p2)
  10.  
  11. #
  12. <class 'str'>
  13. [
  14. {
  15. "k1": "v1",
  16. "k2": "v2"
  17. },
  18. {
  19. "k3": "v3",
  20. "k4": "k4"
  21. },
  22. {
  23. "k5": "k5",
  24. "k6": "v6"
  25. }
  26. ]
  27. <class 'list'>
  28. [{'k1': 'v1', 'k2': 'v2'}, {'k3': 'v3', 'k4': 'k4'}, {'k5': 'k5', 'k6': 'v6'}]

json.load(fp,*,cls=None,object_hook=None,parse_float=None,parse_int=None,parse_constant=None,object_pairs_hook=None,**kw)

将文件对象反序列化为python对象,选项参数用来指定类型解码,在python3.6中fp可以使用二进制文件

  1. import json
  2.  
  3. with open('test.txt','rb') as fp:
  4. data1=json.load(fp)
  5. print(type(data1))
  6. print(data1)
  7.  
  8. #
  9. <class 'list'>
  10. [{'k1': 'v1', 'k2': 'v2'}, {'k3': 'v3', 'k4': 'k4'}, {'k5': 'k5', 'k6': 'v6'}]

json.loads(s,*,encoding=None,cls=None,object_hook=None,parse_float=None,parse_int=None,parse_constant=None,object_pairs_hook=None,**kw)

将json文档的实例反序列化为python对象,参数含义同load()相同

  1. import json
  2. with open('test.txt','rb') as fp:
  3. data1=json.loads(fp.read())
  4. print(type(data1))
  5. print(data1)
  1. #JSON和pickle的区别
  2. #1、JSON只能处理基本数据类型。pickle能处理所有Python的数据类型。
  3. #2、JSON用于各种语言之间的字符转换。pickle用于Python程序对象的持久化或者Python程序间对象网络传输,但不同版本的Python序列化可能还有差异。

3.shelve模块

shelve与pickle类似用来持久化数据的,不过shelve是以键值对的形式,将内存中的数据通过文件持久化,值支持任何pickle支持的python数据格式,它会在目录下生成三个文件

  1. >>> import shelve
    >>> s = shelve.open('test_s.db') #创建shelve并打开
  2. >>> s['k1']={'int':10,'float':8.8,'string':'python'} #写入数据
  3. >>> s.close() #关闭文件
  4. >>> s = shelve.open('test_s.db') #打开文件
  5. >>> print(s['k1']) #访问shelve中的数据
  6. {'float': 8.8, 'string': 'python', 'int': 10}
  7. >>> print(s['k1']['int'])
  8. >>> s.close()

对于存储的key,value值,只能添加key,value,可修改整个value,不能单独修改列表或字典中的元素

  1. >>> s = shelve.open('test_s.db',flag='r')
  2. >>> print(s['k1'])
  3. {'float': 8.8, 'string': 'python', 'int': 10}
  4. >>> s['k2']=[1,2,3] #添加数据
  5. >>> print(s['k2'])
  6. [1, 2, 3]
  7. >>> s['k2'][0]=99 #修改存储的value的单个值时不生效也不报错
  8. >>> print(s['k2'])
  9. [1, 2, 3]
  10. >>> s.close()
  11.  
  12. >>> s = shelve.open('test_s.db',flag='c')
  13. >>> s.keys()
  14. KeysView(<shelve.DbfilenameShelf object at 0x7fd4770f1850>)
  15. >>> len(s)
  16. >>> s['k2']=(33,44) #可以修改key的value
  17. >>> print(s)
  18. <shelve.DbfilenameShelf object at 0x7fd4770f1850>
  19. >>> print(s['k2'])
  20. (33, 44)

写回(write-back)由于shelve在默认情况下是不会记录待持久化对象的任何修改的,所以我们在shelve.open()时候需要修改默认参数,否则对象的修改不会保存。

上面这个例子中,由于一开始我们使用了缺省参数shelve.open()了,因此修改的值即使我们s.close()也不会被保存。

所以当我们试图让shelve去自动捕获对象的变化,我们应该在打开shelf的时候将writeback设置为True。当我们将writeback这个flag设置为True以后,shelf将会将所有从DB中读取的对象存放到一个内存缓存。当我们close()打开的shelf的时候,缓存中所有的对象会被重新写入DB。

  1. >>> s = shelve.open('test_s.db',writeback=True) #使用回写功能打开
  2. >>> print(s['k1']) #初始值
  3. {'float': 8.8, 'string': 'python', 'int': 10}
  4. >>> print(s['k2'])
  5. (33, 44)
  6. >>> s['k1']['float']='99.99' #修改字典中的元素
  7. >>> print(s['k1']) #成功修改
  8. {'float': '99.99', 'string': 'python', 'int': 10}

writeback方式有优点也有缺点。优点是减少了我们出错的概率,并且让对象的持久化对用户更加的透明了;但这种方式并不是所有的情况下都需要,首先,使用writeback以后,shelf在open()的时候会增加额外的内存消耗,并且当DB在close()的时候会将缓存中的每一个对象都写入到DB,这也会带来额外的等待时间。因为shelve没有办法知道缓存中哪些对象修改了,哪些对象没有修改,因此所有的对象都会被写入。

  1. >>> print(s['k1'])
  2. {'float': '99.99', 'string': 'python', 'int': 10}
  3. >>> s['k1']['list']=[1,2,3]
  4. >>> s['k1']['tuple']=(4,5,6)
  5. >>> s['k1']['dic']={'a':123,'b':456}
  6. >>> print(s['k1'])
  7. {'dic': {'b': 456, 'a': 123}, 'int': 10, 'float': '99.99', 'string': 'python', 'tuple': (4, 5, 6), 'list': [1, 2, 3]}

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

  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. 【转】 PHP 两个日期(时间段) 之间的日期数组

    在开发过程中会遇到这样一个需求:获取2018-11-02到2018-11-15之间的日期数组 希望得到如下数组: Array ( [] => -- [] => -- [] => -- ...

  2. 【bzoj2190】: [SDOI2008]仪仗队 数论-欧拉函数

    [bzoj2190]: [SDOI2008]仪仗队 在第i行当且仅当gcd(i,j)=1 可以被看到 欧拉函数求和 没了 /* http://www.cnblogs.com/karl07/ */ #i ...

  3. 洛谷P4457/loj#2513 [BJOI2018]治疗之雨(高斯消元+概率期望)

    题面 传送门(loj) 传送门(洛谷) 题解 模拟赛的时候只想出了高斯消元然后死活不知道怎么继续--结果正解居然就是高斯消元卡常? 首先有个比较难受的地方是它一个回合可能不止扣一滴血--我们得算出\( ...

  4. IDEA mybatis-generator 逆向工程

    1.在maven工程中的resource中创建generatorConfig.xml 2.配置generatorConfig.xml <?xml version="1.0" ...

  5. 最长回文串:LeetCode:Longest Palindromic Substring

    class Solution { public: string longestPalindrome(string s) { int length=s.length(); ; ; ][]={false} ...

  6. socket套接字基本概念

    int socket()函数创建的是套接字socket,返回的是socket描述符(套接字描述符),其实就是文件描述符,socket(套接字)其实就是文件 socket()创建了套接字(文件),只是开 ...

  7. freemarker常用标签解释

    标签一: if else 你可以使用if,elseif和else指令来条件判断是否越过模板的一个部分.这些condition-s必须计算成布尔值,否则错误将会中止模板处理.elseif-s和else- ...

  8. PXE刷机,存储节点失败

    最近刚刚帮客户对一台满配的X6-2刷机初始化,尝试了下PXE方式,但刷完机后,发现计算节点的imagehistory输出的状态都是成功的,而所有的存储节点状态都为failure,具体如下: [root ...

  9. 安装OFFICE2016错误代码0-1018(0)的解决方案 和激活方案

    一.安装OFFICE2016错误代码0-1018(0)的解决方案 下面方法亲测有效:Step 1. Go to C:\Program Files\Common Files\microsoft shar ...

  10. php 伪造HTTP_REFERER页面URL来源的三种方法

    php获取当前页面的前一个页面URL地址,即当前页面是从哪个页面链接过来的,可以使用$_SERVER['HTTP_REFERER']; 但是$_SERVER['HTTP_REFERER']也是可以被伪 ...