zoukankan      html  css  js  c++  java
  • Python常用模块一

    一. os模块

     1 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径
     2 os.chdir("dirname")  改变当前脚本工作目录;相当于shell下cd
     3 os.curdir  返回当前目录: ('.')
     4 os.pardir  获取当前目录的父目录字符串名:('..')
     5 os.makedirs('dirname1/dirname2')    可生成多层递归目录
     6 os.removedirs('dirname1')    若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
     7 os.mkdir('dirname')    生成单级目录;相当于shell中mkdir dirname
     8 os.rmdir('dirname')    删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir 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下为"	
    ",Linux下为"
    "
    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  
    42 # ######## sha384 ########
    43  
    44 hash = hashlib.sha384()
    45 hash.update(b'admin')
    46 print(hash.hexdigest())
    47  
    48 # ######## sha512 ########
    49  
    50 hash = hashlib.sha512()
    51 hash.update(b'admin')
    52 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'x80x03]qx00(Kx01Kx02Kx03Kx04e.'
     9 
    10 
    11 #将数据序列化后存储到文件中
    12 f = open('test.txt','wb')   #pickle只能以二进制格式存储数据到文件
    13 data = {'k1':'python','k2':'java'}
    14 f.write(pickle.dumps(data))   #dumps序列化源数据后写入文件
    15 f.close()
    16 
    17 #反序列化读取源数据
    18 import pickle
    19 f = open('test.txt','rb')
    20 da = pickle.loads(f.read())   #使用loads反序列化
    21 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 
     9 f = open('test1.txt','wb')
    10 data2 = ['py','th','on',123]
    11 pickle.dump(data2,f)    #序列化对象到文件
    12 f = open('test1.txt','rb')
    13 red = pickle.load(f)   #从文件中反序列化对象
    14 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,表示数组元素和对象将按指定的值缩进,可以是整数或字符串如' '

    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)
    #JSON和pickle的区别
    #1、JSON只能处理基本数据类型。pickle能处理所有Python的数据类型。
    #2、JSON用于各种语言之间的字符转换。pickle用于Python程序对象的持久化或者Python程序间对象网络传输,但不同版本的Python序列化可能还有差异。

      3.shelve模块

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

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

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

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

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

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

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

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

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

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

  • 相关阅读:
    新一代MQ apache pulsar的架构与核心概念
    Flutter使用fluwx实现微信分享
    BZOJ3622 已经没有什么好害怕的了 动态规划 容斥原理 组合数学
    NOIP2016提高组Day1T2 天天爱跑步 树链剖分 LCA 倍增 差分
    Codeforces 555C Case of Chocolate 其他
    NOIP2017提高组Day2T3 列队 洛谷P3960 线段树
    NOIP2017提高组Day2T2 宝藏 洛谷P3959 状压dp
    NOIP2017提高组Day1T3 逛公园 洛谷P3953 Tarjan 强连通缩点 SPFA 动态规划 最短路 拓扑序
    Codeforces 873F Forbidden Indices 字符串 SAM/(SA+单调栈)
    Codeforces 873E Awards For Contestants ST表
  • 原文地址:https://www.cnblogs.com/itworks/p/9756245.html
Copyright © 2011-2022 走看看