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]}

  • 相关阅读:
    oracle 快速删除大批量数据方法(全部删除,条件删除,删除大量重复记录) 转
    linux rm删除含有特殊符号目录或者文件
    Linux下安装SVN(Subversion)
    linux还原svn
    linux 备份svn
    Linux下Tomcat重新启动
    Linux下rz,sz与ssh的配合使用
    深度分析Linux下双网卡绑定七种模式
    Ubuntu 12.04 安装Scrapy爬虫框架
    maven 添加本地jar
  • 原文地址:https://www.cnblogs.com/itworks/p/9756245.html
Copyright © 2011-2022 走看看