码迷,mamicode.com
首页 > 编程语言 > 详细

python---基础知识回顾(四)(模块sys,os,random,hashlib,re,json,xml,shutil,configparser,logging,datetime,time,集合,堆,双端队列,其他)

时间:2018-04-18 22:29:49      阅读:271      评论:0      收藏:0      [点我收藏+]

标签:子目录   类型   exp   python   nas   chdir   makedirs   for   hashlib   

前提:dir,__all__,help,__doc__,__file__

dir:可以用来查看模块中的所有特性(函数,类,变量等)

技术分享图片
>>> import copy
>>> dir(copy)
[Error, PyStringMap, _EmptyClass, __all__, __builtins__, __cached__,
 __doc__, __file__, __loader__, __name__, __package__, __spec__, _c
opy_dispatch, _copy_immutable, _copy_with_constructor, _copy_with_copy_met
hod, _deepcopy_atomic, _deepcopy_dict, _deepcopy_dispatch, _deepcopy_lis
t, _deepcopy_method, _deepcopy_tuple, _keep_alive, _reconstruct, built
ins, copy, deepcopy, dispatch_table, error, name, t, weakref]
>>> [x for x in dir(copy) if not x.startswith(_)]
[Error, PyStringMap, builtins, copy, deepcopy, dispatch_table, erro
r, name, t, weakref]
View Code

__all__:(dir中有这个变量)这个变量中包含了一个列表。和我们使用dir加上列表推导式相似。

技术分享图片
>>> copy.__all__
[Error, copy, deepcopy]
View Code

他定义了模块的公有接口,或者说他告诉解释器当我们使用

from copy import *

时,会导入模块的那些函数方法。__all__在编写模块是,可以过滤掉大多不需要的函数方法。若是没有__all__,使用import *会将除了以下划线开头的所有全局名称导入

help:获取帮助,提供日常需要的信息

技术分享图片
>>> help(copy)
Help on module copy:

NAME
    copy - Generic (shallow and deep) copying operations.

DESCRIPTION
    Interface summary:
....


>>> help(copy.copy)
Help on function copy in module copy:

copy(x)
    Shallow copy operation on arbitrary Python objects.

    See the modules __doc__ string for more info.
View Code

引用了__doc__特性,事实上是使用了文档字符串(写在模块开头,或者函数开头的)

__file__:获取文件位置:便于查看文件源代码位置:

技术分享图片
>>> copy.__file__
C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python35\\lib\\copy
.py
View Code

一.sys

sys.argv           命令行参数List,第一个元素是程序本身路径
技术分享图片
import sys
args = sys.argv[1:] #默认0是程序名
args.reverse()
print(,.join(args))


D:\MyPython\day24\基础回顾\01装饰器>python test.py ag1 ag2 ag3
ag3,ag2,ag1
View Code
sys.exit(n)        退出程序,正常退出时exit(0)
技术分享图片
>>> import sys
>>> sys.exit()
View Code
sys.version        获取Python解释程序的版本信息  #python --version
技术分享图片
>>> sys.version
3.5.4 (v3.5.4:3f56838, Aug  8 2017, 02:17:05) [MSC v.1900 64 bit (AMD64)]
View Code
sys.path           返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
技术分享图片
>>> sys.path
[‘‘, C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python35\\pyth
on35.zip, C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python35
\\DLLs, C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python35\lib, C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python35, C
:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python35\\lib\\site-p
ackages]
View Code
sys.platform       返回操作系统平台名称
技术分享图片
>>> sys.platform
win32
View Code
sys.stdin          输入相关  有读取属性r  从屏幕中读取
技术分享图片
>>> var = sys.stdin.read()
aasddsa
^Z
>>> var
aasddsa\n
>>> var = sys.stdin.read(5)
dsad
>>> var
dsad\n
>>>
View Code
sys.stdout         输出相关  有写入属性w  向屏幕中写入
技术分享图片
>>> sys.stdout.write(dasf)
dasf4
>>> sys.stdout.flush()  #刷新当前屏幕  shell中无用
View Code
sys.stderror       错误相关  有写入属性w  向屏幕写入(会含有输出错误信息的信息长度)
技术分享图片
print(sys.stderr)
print(sys.stderr.write("errfawfa"))


<_io.TextIOWrapper name=<stderr> mode=w encoding=UTF-8>
8
errfawfa
View Code

二,os

os.getcwd()                 获取当前工作目录,即当前python脚本工作的目录路径
os.chdir("dirname")         改变当前脚本工作目录;相当于shell下cd
os.curdir                   返回当前目录: (.)
os.pardir                   获取当前目录的父目录字符串名:(..)
os.makedirs(dir1/dir2)    可生成多层递归目录
os.removedirs(dirname1)   若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
os.mkdir(dirname)         生成单级目录;相当于shell中mkdir dirname
os.rmdir(dirname)         删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname
os.listdir(dirname)       列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
os.remove()                 删除一个文件
os.rename("oldname","new")  重命名文件/目录
os.stat(path/filename)    获取文件/目录信息
os.sep                      操作系统特定的路径分隔符,win下为"\\",Linux下为"/"
os.linesep                  当前平台使用的行终止符,win下为"\t\n",Linux下为"\n"
os.pathsep                  用于分割文件路径的字符串
os.name                     字符串指示当前使用平台。win->nt; Linux->posix
技术分享图片
>>> sys.platform
win32
>>> os.name
nt
View Code
os.system("bash command")   运行shell命令,直接显示。用于运行外部程序
技术分享图片
>>> os.system(ls -al)
total 50565
View Code
os.environ                  获取系统环境变量  在系统中高级环境变量Path设置中的数据
os.path.abspath(path)       返回path规范化的绝对路径
os.path.split(path)         将path分割成目录和文件名二元组返回
os.path.dirname(path)       返回path的目录。其实就是os.path.split(path)的第一个元素,就是返回上级目录
技术分享图片
>>> os.path.dirname("c:/sys")
c:/
>>> os.path.dirname("c:/sys/windows/1.txt")
c:/sys/windows
View Code
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所指向的文件或者目录的最后修改时间  是时间戳

三:random

该模块包括返回随机数的函数。可以用于模拟或者产生随机输出的程序。

技术分享图片
>>> random.__all__
[Random, seed, random, uniform, randint, choice, sample, randrang
e, shuffle, normalvariate, lognormvariate, expovariate, vonmisesvariat
e, gammavariate, triangular, gauss, betavariate, paretovariate, weib
ullvariate, getstate, setstate, getrandbits, SystemRandom]
random.__all__

注意:事实上,所产生的数字都是伪随机数,也就是说他们看起来是完全随机的,实际上,他们是以一个可预测的系统作为基础。不过,已经很不错了。若是想实现真正的随机可以使用os中的urandom或者random中的SystemRandom

>>> random.random()        #返回一个在0-之间的随机数
0.5134022843262868
>>> help(random.random)
Help on built-in function random:

random(...) method of random.Random instance
    random() -> x in the interval [0, 1).


>>> random.randint(1,100)      #返回一个在1,100之间的整数
20

>>> random.randrange(1,100)    
80

四:hashlib

用于加密相关的操作,代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法

import hashlib

######### md5 ########

h2 = hashlib.md5()

h2.update(bytes(123456, encoding=utf-8))
print(h2.hexdigest())    #是字符串十六进制
print(h2.digest())  #是字节byte型   通过.hex()可以转换为上面的字符串十六进制

补充:

digest()

>>> help(hashlib._hashlib.HASH.digest)
Help on method_descriptor:

digest(...)
    Return the digest value as a string of binary data.

返回一个bytes 八位一字节(ASCII),对于(编码的字符,若是ASCII中字符则直接显示,否则按照编码进行转换)
b‘\xeaHWo0\xbe\x16i\x97\x16\x99\xc0\x9a\xd0\\\x94‘
对于bytes编码的字符,若是ASCII中字符则直接显示,否则按照编码进行转换
>>> b = bytes("a",encoding="utf-8")
>>> b
ba
>>> b = bytes("a你",encoding="utf-8")
>>> b
ba\xe4\xbd\xa0

hexdigest()

>>> help(hashlib._hashlib.HASH.hexdigest)
Help on method_descriptor:

hexdigest(...)
    Return the digest value as a string of hexadecimal digits.

返回一个十六进制字符串str类型
‘ea48576f30be1669971699c09ad05c94‘

-------------------------------------------------------------------------------------

digest()转hexdigest()

>>> h2.digest().hex()

-------------------------------------------------------------------------------------

hexdigest()转digest()

需要使用binascii模块

>>> help(binascii)
Help on built-in module binascii:

NAME
    binascii - Conversion between binary data and ASCII
用于转换 --- 在二进制和ASCII码之间

binascii中a2b_hex

>>> help(binascii.a2b_hex)
Help on built-in function a2b_hex in module binascii:

a2b_hex(hexstr, /)
    Binary data of hexadecimal representation.
将十六进制字符串转化为二进制用bytes类型显示(ASCII) hexstr must contain an even number of hex digits (upper or lower
case). This function is also available as "unhexlify()".
其中十六进制必须是偶数

一般我们直接使用十六进制字符串,直接是32位字符串

转换成功:

>>> binascii.a2b_hex(h2.hexdigest())
b\xeaHWo0\xbe\x16i\x97\x16\x99\xc0\x9a\xd0\\\x94
>>> h2.digest()
b\xeaHWo0\xbe\x16i\x97\x16\x99\xc0\x9a\xd0\\\x94
>>> h2.hexdigest()
ea48576f30be1669971699c09ad05c94
>>> binascii.a2b_hex(h2.hexdigest())
b\xeaHWo0\xbe\x16i\x97\x16\x99\xc0\x9a\xd0\\\x94

-------------------------------------------------------------------------------------

其中md5算法时不能被反解的,但是可以被撞库,获取密码。

更加安全的方法是在加密算法中添加自定义key再来进行加密:

没有key时:

>>> h1 = hashlib.md5(bytes("123456",encoding="utf-8"))
>>> h1.hexdigest()
e10adc3949ba59abbe56e057f20f883e

上面的数据很容易被撞库获取出来密码。尤其是这些简单的

-------------------------------------------------------------------------------------

使用自定义key时

>>> h2 = hashlib.md5(bytes("asd",encoding="utf-8"))
>>> h2.update(bytes("123456",encoding="utf-8"))
>>> h2.hexdigest()
1e55dbf412cb74d5e2c21fb6452408c7

相当于使用两次update:

>>> h3 = hashlib.md5()
>>> h3.update(byte("asd",encoding="utf-8"))
>>> h3.update(bytes("123456",encoding="utf-8"))
>>> h3.hexdigest()
1e55dbf412cb74d5e2c21fb6452408c7

-------------------------------------------------------------------------------------

######## sha1 ########(这些算法的使用和md5相似)

h = hashlib.sha1()
h.update(bytes(123456, encoding=utf-8))
print(h.hexdigest())

SHA1, SHA224, SHA256, SHA384, SHA512使用时一样的

-------------------------------------------------------------------------------------

python内置还有一个 hmac 模块,它内部对我们创建 key 和 内容 进行进一步的处理然后再加密

import hmac
 
h = hmac.new(bytes(‘asd,encoding="utf-8"))
h.update(bytes(123456,encoding="utf-8"))
print(h.hexdigest())
#548b23c538c78d7053e3231919f78f36 与上面自定义key得出的密码不一样,说明在内部对key和内容又进行了处理

五:re正则模块

 基础了解:正则表达式了解

python---基础知识回顾(四)(模块sys,os,random,hashlib,re,json,xml,shutil,configparser,logging,datetime,time,集合,堆,双端队列,其他)

标签:子目录   类型   exp   python   nas   chdir   makedirs   for   hashlib   

原文地址:https://www.cnblogs.com/ssyfj/p/8877931.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!