zoukankan      html  css  js  c++  java
  • python基础 (序列化,os,sys,random,hashlib)

    1.序列化

    定义:
      JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。简单地说,JSON 可以将 JavaScript 对象中表示的一组数据转换为字符串,然后就
      可以在函数之间轻松地传递这个字符串,或者在异步应用程序中将字符串从 Web 客户机传递给服务器端程序。这个字符串看起来有点儿古怪,但是JavaScript很容易
      解释它,而且 JSON 可以表示比"名称 / 值对"更复杂的结构。
    特点:
      json:JavaScript 对象表示法(JavaScript Object Notation)。
      json:是存储和交换文本信息的语法。类似 XML。
      json:比 XML 更小、更快,更易解析。
      json是通用语言,没有环境区分
    
    python中的json
      1.导入模块:import json
      2.将字典对象转成字符串
        dic = {'1':2}
        s = json.dumps(dic)
        print(repr(s),typr(s))
    
      3.将字典转成字符串
        str1 = "{"1":2}"
        s = json.loads(str1)
        print(s,type(s)
    
      4.将字典转成字符串写入文件
        json.dump({'1':4},open('a'),'w',encoding='utf-8')
    
      5.将文件中的字符串转成字典
        json.load(open('a','r',encoding='utf-8'))
    
    拓展:快速转化json字符串为json对象(linux系统中)
      $ echo '{"links":[{"name":"Google","url":"http://www.google.com"},{"name":"Baidu","url":"http://www.baidu.com"}]}' | python -m json.tool
    import json
    data = {'username':['李华','二愣子'],'sex':'male','age':16}
    json_dic2 = json.dumps(data,sort_keys=True,indent=2,separators=(',',':'),ensure_ascii=False)
    print(json_dic2)
    
    #separators=(',',':') 将,转成:
    #ensure_ascii=False 不使用ascii对中文编码
    #sort_keys=True  按照字母的ascii的编码大小排序
    #indent=2 空2个缩进

    2.pickle

    pickle是python内部独有的序列化方法,只是在python语言中有效,不通用,但是在python中的序列化速度,因为其读取二进制流
    
    import pickle   #导入模块
    print(pickle.dumps({'1':4}))   #将对象转换成类似二进制的东西(字节)
    print(pickle.loads(b'x80x03}qx00Xx01x00x00x001qx01Kx04s.'))  #将二进制(字节)转成字典
    pickle.dump({'2':4},open('b','wb'))   #将字典转成字节写入文件
    d = pickle.load(open('b','rb'))       #将文件中的字节转换成字典
    print(d)
    总结:
        loads json里的将字符串转换成字典   pickle 将字节转换成字典
        dumps json里的将字典转换成字符串   pickle 将字典转换成字节
        load  json里的将文件中的字符串转换成字典  pickle 将文件中的字节转换成字典
        dump  json里的将字典转换字符串写入到文件中,pickle 将字典转换成字节写入到文件中
    注意:在文件中的字符串类型的字典的键值必须是双引号{"1":2}
    View Code

    3.shelve(文件+字典操作)

    import shelve
    f = shelve.open('c',writeback=True)  #创建文件  # writeback = True 回写
    f['name'] = 'tmac'
    ['age'] = 18
    print(f['name'],f['age'])
    f['name'] = ['kobe','admin']
    print(f['name'])
    
    for i in f:
        print(i)   #获取到所有的键
       print(i[item]) #获取所有的值

     4.random

    import random
    print(random.random())  #获取到的0-1之间的小数?将小数的前两位怎么取值那?  面试题,能体现出基础
    print(random.randint(1,10))  #获取a-b之间的随机数(b包含a和b)
    print(random.randrange(1,3))  #获取1-3之间的随机数,但是不包含3
    print(random.randrange(1,21,2))  #获取1-21之间的随机奇数,但是不包含21
    print(random.choice([1,2,3,4,5,6,7]))  #从可迭代对象里面随机
    print(random.choice("sdfwefw"))  #从可迭代对象里面随机选(没有索引的就会报错,比如字典,集合等无序的可迭代对象)
    print(random.choices("sdfwefw",k=2))  #从可迭代对象里面随机选则两个,但是有重复(没有索引的就会报错,比如字典,集合等无序的可迭代对象)
    print(random.sample("sdfwefw",k=2))  #从可迭代对象里面选择两个不同的
    
    
    #########简陋版验证码###########
    import random
    U=(chr(random.randrange(65,91)))   #获取65-91之间的ascii码值 大写
    l=(chr(random.randrange(97,123)))  #获取97-123之间的ascii码值 小写
    n= random.randrange(0,10)           #获取两个数字
    n2 =random.randrange(0,10)
    print(U,l,n,n2,sep="")

     5.os模块

    python标准库中的os模块对操作系统的api进行了封装,并且使用同一个api接口来管理不同的操作系统的相同功能。
    os模块包含与操作系统的系统环境,系统变量,系统文件,用户数据库以及权限进行交换的函数,主要用来和操作系统做交互
    python标准库中的os模块对操作系统的api进行了封装,并且使用同一个api接口来管理不同的操作系统的相同功能。
        os模块包含与操作系统的系统环境,系统变量,系统文件,用户数据库以及权限进行交换的函数
        2.1 os模块
          os模块中包含两个比较常用的函数
            os.getcwd()  #获取当前绝对路径
            os.listdir() #列出当前目录下的文件和文件夹
        2.2 os.path详解(用来对文件和文件路径进行管理)
          拆分路径
            os.path.split()   #返回一个二元组,包含文件路径和文件名
            os.path.dirname()  #返回文件的路径
            os.path.basename() #返回文件名
            os.path.splitext() #返回一个去处扩展名部分和扩展名的二元组
              import os
              path = "/root/p0st/h/error.log"
              print(os.path.split(path))       --->('/root/p0st/h', 'error.log')
              print(os.path.dirname(path))     --->/root/p0st/h
              print(os.path.basename(path))    --->error.log
              print(os.path.splitext(path))    --->('/root/p0st/h/error', '.log')
          构建路径
            os.path.expanduser('~')#返回当前输入用户的家目录,必须得加~或~adm等指定用户
            os.path.abspath()      #返回文件或路径的绝对路径
            os.path.path()         #根据不同的操作系统,使用不同的路径分隔符拼接路径
              import os 
              print(os.path.expanduser('~adm')) --->/var/adm
              print(os.path.abspath('456'))       --->E:oldboypython 20456
              print(os.path.join(os.path.expanduser('~'),'123','456.txt'))   --->/var/adm/123/456.txt
    
            判断一个路径是否为绝对路径
              import os
              os.path.isabs(os.path.join(os.path.expanduser('~adm'),'123','456.txt')) --->True
    
            查看当前文件名字需要使用__file__这个特殊变量:当前代码所在的源文件
              import os
              path = os.path.abspath(__file__)
              print(path)   --->/var/adm/123/456.py
              print(os.path.abspath(os.path.join(os.path.dirname(path),os.path.pardir)))  -->/var
            获取文件属性和判断文件类型
              import os
              path= os.path.abspath(__file__)
              print(os.path.getatime(path))   #获取当前文件的访问时间
              print(os.path.getctime(path))   #获取当前文件的创建时间
              print(os.path.getmtime(path))   #获取当前文件的修改时间
              print(os.path.getsize(path))    #获取当前文件的大小
               print(os.path.exists(path))              #判断当前路径是否存在
              print(os.path.isfile(path))              #参数所指的路径存在,并且是一个文件
              print(os.path.isdir(path))               #参数所所指的路径存在,并且是一个目录
              print(os.path.islink(path))              #。。。。。。。并且是一个链接
              print(os.path.ismount(path))             #。。。。。。。并且是一个挂载点
    
            使用os模块管理文件和目录
              os.remove(path)/unlink(path): 删除path所指的文件
              os.rmdir(path)/removedirs(path) : 删除path所指向的目录,该文件夹必须为空,否则报错。
              os.mkdir(path):创建一个文件夹
              os.rename('olddir','newdir'):修改一个文件夹的名字
            
            使用os模块来修改和判断文件权限
              os.chmod(filename,0777) #修改文件权限
              os.access(filename,os.R_OK)#判断文件权限---> os.R_OK:是否可读, os.W_OK:是否可写, os.X_OK:是否可执行
    View Code

    os模块常用的

    #和文件夹相关
    os.makedirs('dirname1/dirname2')    可生成多层递归目录
    os.removedirs('dirname1')    若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
    os.mkdir('dirname')    生成单级目录;相当于shell中mkdir dirname
    os.rmdir('dirname')    删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname
    os.listdir('dirname')    列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
    ​
    # 和文件相关
    os.remove()  删除一个文件
    os.rename("oldname","newname")  重命名文件/目录
    os.stat('path/filename')  获取文件/目录信息
    ​
    # 和操作系统差异相关
    os.sep    输出操作系统特定的路径分隔符,win下为"\",Linux下为"/"
    os.linesep    输出当前平台使用的行终止符,win下为"
    ",Linux下为"
    "
    os.pathsep    输出用于分割文件路径的字符串 win下为;,Linux下为:
    os.name    输出字符串指示当前使用平台。win->'nt'; Linux->'posix'# 和执行系统命令相关
    os.system("bash command")  运行shell命令,直接显示
    os.popen("bash command).read()  运行shell命令,获取执行结果
    os.environ  获取系统环境变量
    ​
    #path系列,和路径相关
    os.path.abspath(path) 返回path规范化的绝对路径
    os.path.split(path) 将path分割成目录和文件名二元组返回
    os.path.dirname(path) 返回path的目录。其实就是os.path.split(path)的第一个元素
    os.path.basename(path) 返回path最后的文件名。如何path以/或结尾,那么就会返回空值,即os.path.split(path)的第二个元素。
    os.path.exists(path)  如果path存在,返回True;如果path不存在,返回False
    os.path.isabs(path)  如果path是绝对路径,返回True
    os.path.isfile(path)  如果path是一个存在的文件,返回True。否则返回False
    os.path.isdir(path)  如果path是一个存在的目录,则返回True。否则返回False
    os.path.join(path1[, path2[, ...]])  将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
    os.path.getatime(path)  返回path所指向的文件或者目录的最后访问时间
    os.path.getmtime(path)  返回path所指向的文件或者目录的最后修改时间
    os.path.getsize(path) 返回path的大小<br></em>
    
    #其他应用
    os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径
    os.chdir("dirname")  改变当前脚本工作目录;相当于shell下cd
    os.curdir  返回当前目录: ('.')
    os.pardir  获取当前目录的父目录字符串名:('..')
    注意:os.stat('path/filename') 获取文件/目录信息 的结构说明
    
    
    stat 结构:
    st_mode: inode 保护模式
    st_ino: inode 节点号。
    st_dev: inode 驻留的设备。
    st_nlink: inode 的链接数。
    st_uid: 所有者的用户ID。
    st_gid: 所有者的组ID。
    st_size: 普通文件以字节为单位的大小;包含等待某些特殊文件的数据。
    st_atime: 上次访问的时间。
    st_mtime: 最后一次修改的时间。
    st_ctime: 由操作系统报告的"ctime"。在某些系统上(如Unix)是最新的元数据更改的时间,在其它系统上(如Windows)是创建时间(详细信息参见平台的文档)。 
    View Code

     6.sys模块

    sys模块提供对解释器使用或维护的一些变量的访问,以及与解释器强烈交互的函数。它始终可用

    7sys

    1.基本
    print(sys.path)          # 添加自定义模块路径和解释器的工作目录        # ******
    print(sys.version)       # 获取解释的版本号
    print(sys.platform)      #获取当前操作系统的平台位数 
    print(sys.exit(1))       #退出并返回1
    
    2.sys.argv
    sys.argv():
    sys.argv:是sys库下面的列表,该列表保存了所有的命令行参数,其中下标为0的元素是执行文件的名字,其余的参数已字符串的形式保存在该列表中
    此列表可以从终端接收无数个参数,而存放在列表当中,如果没有第一个参数的话,程序会报错,而无法执行,所以在argv中添加一个空元素,当python json.py test.txt有参数的时候,test.txt就成了argv的第一个元素
    
    在Python标准库sys中有三个文件描述符分别是:
    stdin(标准输入 0,指的是通过<或者|来传递数据),
    stdout(标准输出 1),
    stderr(标准错误 2)。
    通过标准输入结合管道,就不需要通过open()函数来打开文件了。
    
    1.使用sys库中的stdin读取内容(linux中的标准输入)
      windows 
      创建 tes_sys_stdin.py文件
         import sys
         name = sys.stdin.readline()
         print (name)
      linux:
      创建 test_sys_stdin.py文件
        import sys
        for line in sys.stdin():
        print (line)
        执行test_sys_stdin.py文件:
          cat /etc/passwd | python test_sys_stdin.py
          python test_sys_stdin.py < /etc/passwd
        也可以通过stdin.readlines()函数将标准输入的内容读取到一个列表里面
       sys.stdin.readline( )会将标准输入全部获取,包括末尾的'
    ',因此用len计算长度时是把换行符'
    '算进去了的,但是input( )获取输入时返回的结果是不包含末尾的换行符'
    '的。
       因此如果在平时使用sys.stdin.readline( )获取输入的话,不要忘了去掉末尾的换行符.
       可以用strip( )函数(sys.stdin.readline( ).strip('
    '))或sys.stdin.readline( )[:-1]这两种方法去掉换行。
    View Code

    8.other

    os sys 事列一

    """
    通过命令行读取文件名称,如果文件存在,则查看是否能执行,不能的话修改权限为777,如果可执行的话就打印输出文件内容,如果文件不在,则提示文不存在
    """
    # _*_ encoding:utf-8 _*_
    import os
    import sys
    
    sys.argv.append('')
    file_name = sys.argv[1]
    def read_file():
        if not os.path.isfile(file_name):
            raise SystemExit(file_name + " 文件不存在")
        elif os.access(file_name,os.X_OK):
            with open(file_name) as info:
                print(info.read())
        else:
            os.chmod(file_name,0777)
            print("已修改为0777")    
    if __name__ == '__main__':
        read_file()
    View Code

    os sys 事列二

    """
    打印最常用的十条linux命令
    """
    #_*_ encoding:utf-8 _*_
    import os
    from collections import Counter
    
    c = Counter()
    with open(os.path.expanduser('~/.bash_history')) as cmd_info:
    for line in cmd_info:
    cmd = line.strip().split()
    if cmd:
    c[cmd[0]]+=1
    print(c.most_common(10))

    9.hashlib 

    Python的hashlib提供了常见的摘要算法,如MD5,SHA1,SHA256,SHA512等等。
    什么是摘要算法呢?摘要算法又称哈希算法、散列算法。它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示)。
    
    基本应用
        import hashlib      #导入hashlib模块
        md5 = hashlib.md5() #选择一个要加密的方式
        md5.update('123456'.encode('utf-8'))  #将要加密的内容格使用选择后的方法进行加密
        print(md5.hexdigest()) #返回加密后的字符串
        
        import hashlib
        md5 = hashlib.md5(''.encode('utf-8'))  # 选择加密方式  加盐
        md5.update('admin'.encode('utf-8'))      #将明文转成字节然后进行加密
        print(md5.hexdigest())                   #生成密文
    
    使用sha1等加密方式,只需要把上面MD5的名字换掉就ok
    View Code
  • 相关阅读:
    树上莫队 SPOJ COT2
    UVA 11478(差分约束 + 二分)
    可图的度序列判断与构造
    Codeforces Round #306 (Div. 2) 550A Two Substrings
    UVA 11300 分金币
    HDU 2546 饭卡(01 背包)
    hdu 1142 最短路+记忆化
    codeforces ice cave
    codeforces school mark(贪心)
    JavaScript函数
  • 原文地址:https://www.cnblogs.com/jiazeng/p/10560701.html
Copyright © 2011-2022 走看看