python 内置模块(二)

python 内置模块(二)

logging模块的使用

import logging    #导入logging模块        
logging.debug("this is debug message")
logging.info("this is info message")
logging.warning("this is warning message")
logging.error("this is error message")
logging.critical("this is critical message")

输出结果:

WARNING:root:this is warning message
ERROR:root:this is error message
CRITICAL:root:this is critical message

解释:上面例子中,默认只打印出warning error critical的三种日志;

默认情况下,logging将日志打印到屏幕,日志级别大小关系为:CRITICAL(严重)> ERROR(错误)> WARNING(警告)> INFO( 正常输出)> DEBUG(调试)> NOTSET() ;也可以自己定义日志级别。

自定义日志级别

使用 logging.basicConfig(level=logging.定义级别)

import logging    #导入logging模块      

logging.basicConfig(level=logging.DEBUG)
logging.debug("this is debug message")
logging.info("this is info message")
logging.warning("this is warning message")
logging.error("this is error message")
logging.critical("this is critical message")

输出结果:

DEBUG:root:this is debug message
INFO:root:this is info message
WARNING:root:this is warning message
ERROR:root:this is error message
CRITICAL:root:this is critical message

这样就可以显示debug级别后的日志消息

例子2:将日志以消息格式存放到一个文件中。

import logging
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',datefmt=' %Y/%m/%d %H:%M:%S', filename='myapp.log', filemode='w')
logger = logging.getLogger(__name__)
logging.debug('This is debug message')
logging.info('This is info message')
logging.warning('This is warning message')

执行后结果如下,生成了一个myapp.log的文件记录了以 时间、行号、日志级别、日志描述消息:

更多更详细的内容可以点击Logging facility for Python查看官网内容。


os模块(系统调用模块)

os模块提供对操作系统的文件目录操作、文件路径操作等功能

os.path

os.path模块主要用于对文件路径的操作,如:路径分割和拼接、取文件相对路径和绝对路径等。

os.path.abspath(path)

返回指定文件的绝对路径。

import os
a = os.path.abspath("demon2.py")
print(a)
输出结果     D:\livepython\test\demon2.py

os.path.split(path)
将路径名称分割成两部分(head,tail),tail是路径path名称中最后一部分且不包括斜线,head是tail之前的所有部分。如果path以斜线结尾则tail为空,如果path中没有斜线则head为空字符串。

1
2
3
4
5
6
7
8
9
>>> import os
>>> os.path.split("C:\\Users\\xiaohuihui")
('C:\\Users', 'xiaohuihui')
>>> os.path.split("C:\\Users\\xiaohuihui\\")
('C:\\Users\\xiaohuihui', '')
>>> os.path.split("C:\\Users\\xiaohuihui\\sunny.txt")
('C:\\Users\\xiaohuihui', 'sunny.txt')
>>> os.path.split("sunny.txt")
('', 'sunny.txt')

os.path.splitext(path)
将路径名称分割成两部分(root,ext),其中ext为后缀名。

1
2
3
4
5
6
7
8
9
>>> import os
>>> os.path.splitext("C:\\Users\\xiaohuihui\\sunny.txt")
('C:\\Users\\xiaohuihui\\sunny', '.txt')
>>> os.path.splitext("C:\\Users\\xiaohuihui\\")
('C:\\Users\\xiaohuihui\\', '')
>>> os.path.splitext("C:\\Users\\xiaohuihui")
('C:\\Users\\xiaohuihui', '')
>>> os.path.splitext("sunny.text")
('sunny', '.text')
  • os.path.basename(path)
    返回path路径名的基名称,也就是os.path.split(path)返回的第二个值。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    >>> import os
    >>> os.path.basename("C:\\Users\\xiaohuihui\\sunny.txt")
    'sunny.txt'
    >>> os.path.basename("C:\\Users\\xiaohuihui\\")
    ''
    >>> os.path.basename("C:\\Users\\xiaohuihui")
    'xiaohuihui'
    >>> os.path.basename("sunny.txt")
    'sunny.txt'
    
  • os.path.dirname(path)
    返回path路径的目录名称,也就是os.path.split(path)返回的第一个值。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    >>> import os
    >>> os.path.dirname("C:\\Users\\xiaohuihui\\sunny.txt")
    'C:\\Users\\xiaohuihui'
    >>> os.path.dirname("C:\\Users\\xiaohuihui\\")
    'C:\\Users\\xiaohuihui'
    >>> os.path.dirname("C:\\Users\\xiaohuihui")
    'C:\\Users'
    >>> os.path.dirname("sunny.txt")
    ''
    
  • os.path.join(path, *paths)
    将一个或多个路径中的非空值通过路径分隔符拼接成一个新的路径名称,如果在拼接过程中遇到绝对路径将会丢弃前面的部分并从该绝对路径重新开始拼接。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    >>> import os
    >>> os.path.join("C:\\Users\\xiaohuihui\\")
    'C:\\Users\\xiaohuihui\\'
    >>> os.path.join("C:\\Users\\xiaohuihui")
    'C:\\Users\\xiaohuihui'
    >>> os.path.join("C:\\Users\\xiaohuihui", "sunny.txt")
    'C:\\Users\\xiaohuihui\\sunny.txt'
    >>> os.path.join("C:\\Users", "xiaohuihui", "sunny.txt")
    'C:\\Users\\xiaohuihui\\sunny.txt'
    >>> os.path.join("C:\\Users", "C:\\Users\\xiaohuihui", "sunny.txt")
    'C:\\Users\\xiaohuihui\\sunny.txt'
    
  • os.path.exists(path)
    指定的文件路径存在则返回True,否则返回False。如果是失效的链接文件则返回False。

    1
    2
    3
    4
    5
    6
    7
    
    >>> import os
    >>> os.path.exists("C:\\Users\\xiaohuihui\\")
    True
    >>> os.path.exists("C:\\Users\\xiaohuihui\\www.txt")
    False
    >>> os.path.exists("C:\\Users\\xiaohuihui\\sunny.txt")
    True
    
  • os.path.getatime(path)
    返回该路径对应文件的最后一次访问时间的时间戳(秒),如果文件不存在或无法访问则引发OSError

    1
    2
    3
    4
    5
    
    >>> import os
    >>> os.path.getatime("C:\\Users\\xiaohuihui\\sunny.txt")
    1523624105.3170362
    >>> os.path.getatime("C:\\Users\\xiaohuihui")
    1524141055.6605625
    
  • os.path.getmtime(path)
    返回该路径对应文件的最后修改时间的时间戳(秒),如果文件不存在或无法访问则引发OSError

    1
    2
    3
    4
    5
    
    >>> import os
    >>> os.path.getmtime("C:\\Users\\xiaohuihui\\sunny.txt")
    1523627463.3876014
    >>> os.path.getmtime("C:\\Users\\xiaohuihui")
    1524141055.6605625
    
  • os.path.getctime(path)
    返回该路径对应文件的ctime,在某些系统上(unix)是最后一次元数据更改时间,其他系统上是(如windows)是路径创建时间;,如果文件不存在或无法访问则引发OSError

    1
    2
    3
    4
    5
    
    >>> import os
    >>> os.path.getctime("C:\\Users\\xiaohuihui\\sunny.txt")
    1523624105.3170362
    >>> os.path.getctime("C:\\Users\\xiaohuihui")
    1508831681.0998952
    
  • os.path.getsize(path)
    返回指定路径对应文件的字节大小

    1
    2
    3
    4
    5
    6
    7
    
    >>> import os
    >>> os.path.getsize("C:\\Users\\xiaohuihui\\sunny.txt")
    68
    >>> os.path.getsize("C:\\Users\\xiaohuihui\\")
    20480
    >>> os.path.getsize("C:\\Users\\xiaohuihui")
    20480
    
  • os.path.relpath(path, start=os.curdir)
    返回path相对于start的相对路径

    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    >>> import os
    >>> os.path.relpath("C:\\Users\\xiaohuihui\\sunny.txt")
    'sunny.txt'
    >>> os.path.relpath("C:\\Users\\xiaohuihui\\")
    '.'
    >>> os.path.relpath("C:\\Users\\xiaohuihui")
    '.'
    >>> os.path.relpath("C:\\Users\\xiaohuihui\\sunny.txt", start="C:\\Users")
    'xiaohuihui\\sunny.txt'
    
  • os.path.realpath(path)
    获取path的真实、绝对路径(可用于获取软链接文件指向的文件路径)

    1
    2
    3
    
    >>> import os
    >>> os.path.realpath("sunny.txt")
    'C:\\Users\\xiaohuihui\\sunny.txt'
    
  • os.path.isabs(path)
    判断path是否为绝对路径,是则返回True,否则返回False。

    1
    2
    3
    4
    5
    
    >>> import os
    >>> os.path.isabs("C:\\Users\\xiaohuihui\\sunny.txt")
    True
    >>> os.path.isabs("sunny.txt")
    False
    
  • os.path.isfile(path)
    判断path是否是一个文件

    1
    2
    3
    4
    5
    6
    7
    
    >>> import os
    >>> os.path.isfile("C:\\Users\\xiaohuihui\\sunny.txt")
    True
    >>> os.path.isfile("sunny.txt")
    True
    >>> os.path.isfile("C:\\Users\\xiaohuihui\\")
    False
    
  • os.path.isdir(path)
    判断path是否是一个目录

    1
    2
    3
    4
    5
    6
    7
    
    >>> import os
    >>> os.path.isdir("C:\\Users\\xiaohuihui\\sunny.txt")
    False
    >>> os.path.isdir("C:\\Users\\xiaohuihui\\")
    True
    >>> os.path.isdir("C:\\Users\\xiaohuihui")
    True
    
  • os.path.islink(path)
    判断path是否是一个链接

    1
    2
    3
    
    >>> import os
    >>> os.path.islink("C:\\Users\\xiaohuihui\\sunny.txt")
    False
    
  • os.path.ismount(path)
    判断path是否是一个挂载点

    1
    2
    3
    4
    5
    
    >>> import os
    >>> os.path.ismount("C:\\Users\\xiaohuihui\\sunny.txt")
    False
    >>> os.path.ismount("C")
    False
    
  • os.path.samefile(path1, path2)
    判断path1和path2是否为同一个文件

    1
    2
    3
    4
    5
    
    >>> import os
    >>> os.path.samefile("C:\\Users\\xiaohuihui\\sunny.txt", "sunny.txt")
    True
    >>> os.path.samefile("C:\\Users\\xiaohuihui\\sunny.txt", "sunny1.txt")
    False

在使用os模块过程中,在一些unix平台的许多文件或目录的操作函数支持下面的特性

  1. 指定一个文件描述符
    对于某些函数。path参数不仅可以是一个字符串,也可以是文件描述符。该函数会操作这个文件描述符引用的文件。可以通过os.supports_fd来检查当前平台的path参数是否可以指定为一个文件描述符,如果不可用将引发NotImplementedError。如果该函数还支持dir_fd或follow_symlinks参数,当path被以文件描述符的方式提供时,指定dir_fd或follow_symlinks参数是错误的。
  2. 相对于目录描述符的路径
    如果dir_fd不是None,它应该是一个指向某个目录的文件描述符,并且要操作的path应该是一个相对于该目录的相对路径;如果path是一个绝对路径,dir_fd将会被忽略。
  3. 不遵循符号链接
    如果follow_symlinks是False,并且要操作的路径中最后一个元素是一个符号链接时,该函数将会操作这个链接文件,而不是操作这个链接文件指向的文件。
  • os.access(path, mode, *, dir_fd=None, effective_ids=False, follow_symlinks=True)
    测试当前用户是否对path所指向的文件有某种访问权限。
    mode可取值为:os.F_OK(文件存在)、os.R_OK(可读)、os.W_OK(可写)、os.X_OK(可执行)中的一个或用逻辑运算符‘|’连接起来的多个。

    1
    2
    3
    4
    5
    
    >>> import os
    >>> os.access("C:\\Users\\xiaohuihui\\sunny.txt",os.F_OK)
    True
    >>> os.access("C:\\Users\\xiaohuihui\\sunny.txt",os.R_OK|os.W_OK)
    True
    
  • os.chdir(path)
    更改当前工作目录

    1
    2
    3
    4
    5
    6
    
    >>> import os
    >>> os.getcwd()
    'C:\\Users\\xiaohuihui'
    >>> os.chdir("D:\\rhce")
    >>> os.getcwd()
    'D:\\rhce'
    
  • os.getcwd()
    返回一个表示当前目录的字符串

    1
    2
    3
    
    >>> import os
    >>> os.getcwd()
    'C:\\Users\\xiaohuihui'
    
  • os.listrdir(path=’.’)
    返回指定目录中所有的文件列表,顺序不固定,且不包含...,python2中path无默认值。

    1
    2
    3
    
    >>> import os
    >>> os.listdir("D:\Dns")
    ['1.txt', 'DNSTEST']
    
  • os.mkdir(path, mode=0777, *, dir_fd=None)
    创建一个名为path的目录并指定目录权限,如果目录已经存在则会引起FileExistsError;dir_fd是Python3.3开始新加的参数。
    需要说明的是该函数与os.makedirs()、os.mkfifo()函数创建的目或逛到文件的权限会受到umask的影响,比如指定mode为0777,实际目录权限为 0777 - umask = 0755

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    >>> import os
    >>> os.path.exists("C:\\Users\\xiaohuihui\\test1")    #判断test1目录是否存在
    False
    >>> os.mkdir("test1")    #创建目录test1
    >>> os.path.exists("C:\\Users\\xiaohuihui\\test1")
    True
    >>> os.mkdir("test1")
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    FileExistsError: [WinError 183] 当文件已存在时,无法创建该文件。: 'test1'
    
  • os.remove(path, *, dir_fd=None)
    删除指定的文件,如果path是个目录将会引发OSError。

    1
    2
    3
    4
    5
    6
    
    >>> import os
    >>> os.path.exists("sunny1.txt")
    True
    >>> os.remove("C:\\Users\\xiaohuihui\\sunny1.txt")
    >>> os.path.exists("sunny1.txt")
    False
    
  • os.rmdir(path, *, dir_fd=None)
    删除指定的空目录,如果目录不为空会引发OSError。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    >>> import os
    >>> os.path.exists("C:\\Users\\xiaohuihui\\test1")
    True
    >>> os.rmdir("test1")
    >>> os.path.exists("C:\\Users\\xiaohuihui\\test1")
    False
    >>> os.rmdir("oracle")
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    OSError: [WinError 145] 目录不是空的。: 'oracle'
    
  • os.rename(src, dst, *, src_dir_fd=-None, dst_dir_fd=None)
    目录或文件重命名,如果dst是一个目录将会引发OSError。在Unix平台上,如果dst存在且是一个文件,那么只要用户有权限就将会被静默替换;而在Windows平台上,如果dst存在,即使它是一个文件也会引发OSError。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    >>> import os
    >>> os.path.exists("sunny1.txt")
    False
    >>> os.path.exists("sunny.txt")
    True
    >>> os.rename("sunny.txt", "sunny1.txt")
    >>> os.path.exists("sunny.txt")
    False
    >>> os.path.exists("sunny1.txt")
    True
    
  • os.replace(src, dst, *, src_dir_fd=None, dst_dir_fd=None)
    与os.rename()功能相同,区别在于:对于os.replace()来说,如果dst存在且是一个文件,那么只要用户有权限就将会被静默替换,而没有平台上的差别

    1
    2
    3
    4
    5
    6
    
    >>> import os
    >>> os.replace("sunny1.txt","sunny.txt")
    >>> os.path.exists("sunny1.txt")
    False
    >>> os.path.exists("sunny.txt")
    True
    
  • os.linesep
    输出当前平台使用的行终止符。windows下使用的是\r\n,linxu下使用的是\n

    1
    2
    3
    4
    5
    
    >>> import os
    >>> os.linesep   #windows下执行
    '\r\n'
    >>> os.linesep    #linux下执行
    '\n'
    
  • os.name
    返回当前系统平台,windows则返回nt,unix则返回posix

    1
    2
    3
    4
    5
    
    >>> import os
    >>> os.name    #windows下执行
    'nt'
    >>> os.name    #linux下执行
    'posix'
    
  • os.system(cmd)
    执行指定命令并返回执行结果。

    1
    2
    3
    4
    
    >>> import os
    >>> os.system("netstat -aon|findstr 0:80")
      TCP    0.0.0.0:80             0.0.0.0:0              LISTENING       4
    0
    

知识点分享
在执行命令的时候,windows和unix的命令不尽相同,可以使用os.name进行区分,保证代码的兼容性。类似下面代码

1
2
3
4
5
6
7
8
9
10
11
if os.name == "nt":
    cmd = "ipconfig"
elif os.name == "posix":
    cmd = "ifconfig"

os.system(cmd)

>>> result = os.popen("netstat -aon|findstr 0:80").read()
>>> print(result)
  TCP    0.0.0.0:80             0.0.0.0:0              LISTENING       4
  TCP    10.12.5.244:57008      140.205.34.20:80       ESTABLISHED     32052

os是一个操作系统接口模块,提供了各种和操作系统相关的功能,上面写到的文件和目录操作等知识其中的一部分。更多更详细的内容可以点击Miscellaneous operating system interfaces查看官网介绍。

os.name                #判断正在使用的平台;Windows 返回 ‘nt'; Linux 返回’posix'
os.system(cmd)    #执行系统命令,但是没有返回结果 
os.listdir(“C:”)    #显示当前路径下的目录文件;和 ls 命令 一样 
os.chdir(“..”)       #改变目录到指定目录; cd命令 
os.getcwd()           #显示当前目录 , pwd 命令
os.remove(“”)    #删除文件 
os.rmdir(“”)       #删除目录 
os.mkdir()             #创建目录
os.rename(“”,”“)   #修改文件名 
os.linesep              #显示换行符;windows换行符\n\r   Linux的换行符\n   Mac的换行符\r 
print(os.path.abspath(“./”))     #显示当前目录的绝对路径


sys模块

sys模块提供访问由解释器使用或维护的变量和在与解释器交互使用到的函数。

  • sys.argv()
    给程序传递参数,其中argv[0]表示脚本名称。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    
    import sys
    def usage():
        '''usage'''
        print('Usage: %s %s %s %s' % (sys.argv[0], 'tokenid', 'Subject', 'Content'))
        sys.exit()
    
    def main():
        if len(sys.argv) != 4:
            usage()
        else:
            print(sys.argv[0])
            print(sys.argv[1])
            print(sys.argv[2])
            print(sys.argv[3])
    
    if __name__ == "__main__":
        main()
    

输出结果

1
2
3
4
5
C:\Users\hewj>python D:/pythondev/calculate/module/sys1.py 12 22 32
D:/pythondev/calculate/module/sys1.py   #脚本名称
12                                       #传入参数的输出
22
32

  • sys.path
    获取指定模块模块搜索路径的字符串集合。将写好的模块放在得到的某个路径下,就可以在import的时候正确找到。在import模块名称的时候就是根据sys.path搜索模块。也可以自定义添加模块路径sys.path.append(path),但只是临时生效,退出当前环境之后失效。

    1
    2
    3
    
    import sys
    >>> sys.path
    ['', 'C:\\Users\\xiaohuihui\\AppData\\Local\\Programs\\Python\\Python36\\python36.zip', 'C:\\Users\\xiaohuihui\\AppData\\Local\\Programs\\Python\\Python36\\DLLs', 'C:\\Users\\xiaohuihui\\AppData\\Local\\Programs\\Python\\Python36\\lib', 'C:\\Users\\xiaohuihui\\AppData\\Local\\Programs\\Python\\Python36', 'C:\\Users\\xiaohuihui\\AppData\\Roaming\\Python\\Python36\\site-packages', 'C:\\Users\\xiaohuihui\\AppData\\Local\\Programs\\Python\\Python36\\lib\\site-packages']
    
  • sys.modules
    sys.modules是一个全局字典,该字典在python启动之后就加载在内存中。当导入新模块时,sys.modules将自动记录该模块,第二次导入该模块时python会自动从字典中查找从而加快程序运行速度。它拥有字典的一切方法。

    1
    2
    3
    4
    5
    6
    7
    
    import sys
    >>> sys.modules.keys()    #返回所有已导入的模块列表
    dict_keys(['builtins', 'sys', ...., 'os', 'errno', 'stat', '_stat', 'ntpath', 'genericpath', 'os.path', '_collections_abc', '_sitebuiltins', 'sysconfig', 'atexit'])
    >>> sys.modules.values()    #返回模块(含对应路径)
    dict_values([<module 'builtins' (built-in)>, ...., <module 'atexit' (built-in)>])
    >>> sys.modules["os"]    #指定key对应的values
    <module 'os' from 'C:\\Users\\xiaohuihui\\AppData\\Local\\Programs\\Python\\Python36\\lib\\os.py'>
    
  • sys.exit([arg])
    表示退出程序。
    一般情况下程序执行到末尾解释器自动退出,若需要中途退出,可以调用sys.exit()函数,带有一个可选的整数参数返回给调用它的程序。(0表示正常退出,其他表示异常)也可以使用字符串参数,传递对应的报错信息。

    1
    2
    3
    4
    
    import sys
    print("This exit test")
    sys.exit(1)     # 退出程序
    print("there")  # 不会被print
    

输出结果

1
This exit test

  • sys.stdin/stdout/stderr
    stdin/stdout/stderr变量包含与标准I/O流对应流对象。如果需要更好的控制输入输出,而print不能满足要求的情况下可以使用。
    print其实就是调用stdout.write(obj+'\n')方法。
    stdin示例
    1
    2
    3
    4
    
    import sys
    print("Please input your name: ")
    name = sys.stdin.readline()    #和input功能类似。
    print("name:{0}".format(name))
    

输出结果

1
2
3
Please input your name: 
xiaohh
name:xiaohh

stdout示例

1
2
3
f = open("sunny2.txt", "w")
sys.stdout = f
print("hello world")

  • sys.platform
    获取当前系统平台,如win32/linux等。
    1
    2
    3
    4
    5
    
    import sys
    >>> sys.platform    #windows系统执行
    'win32'
    >>> sys.platform    #linux系统执行
    'linux'
    

判断系统平台执行不同命令,推荐使用下面方式

1
2
3
4
if sys.platform.startswith('freebsd'):
    # FreeBSD-specific code here...
elif sys.platform.startswith('linux'):
    # Linux-specific code here...

更多更详细的内容可以点击[System-specific parameters and    functions] https://docs.python.org/3.6/library/sys.html)查看官网内容。


random模块

random随机数操作模块,可以用来生成随机数和完成与随机数相关的功能。

random.random()
#用于生成半开区间[0.0, 1.0)内的一个随机浮点数

import random

print(random.random())

输出结果: 0.24956464390325284

random.uniform(a, b)
用于生成一个指定范围内[a, b]的随机浮点数。

import random
print(random.uniform(1,10))
输出结果:9.67291559985509

random.randint(a, b)
用于生成一个指定范围内[a, b]的整数。

import random
print(random.randint(1,10)) 
输出结果:  5
random.randrange(start, stop[, step])
   用于从指定范围[start, stop)。按指定基数step递增的集合中获取一个随机数,step默认为1。
random.randrange(stop)等价于random.randrange(0,stop)。

import random
print(random.randrange(10, 50, 5))   #输出的结果:  10
print(random.randrange(10, 50))   #输出的结果:  44    
print(random.randrange(50))      #输出的结果: 21
print(random.randrange(50))       #输出的结果: 34

random.sample(population, k)
从指定列表中随机取 k 个不重复的元素,并以列表的形式返回,用于不进行内容替换的随机抽样。

import random
list = [1, 2, 3, 4, 5, 6]    
print(random.sample(list, 3))     #输出的结果: [5, 4, 1]
list1 = [1, 2, 2, 4, 5, 5]
print(random.sample(list1, 5))    #输出的结果: [1, 2, 5, 2, 5]

随机取一个1到100 的整数;

import random
print(random.randint(1,100))   #输出结果为 16

在色子1到6间随机取数1000次,色子的点数出现分别多少次:

import random

class NumberCount(object):
    def __init__(self):
        self.number1 = 0
        self.number2 = 0
        self.number3 = 0
        self.number4 = 0
        self.number5 = 0
        self.number6 = 0
    def count(self):
        for i in range(1,1001):
            number = random.randint(1,6)
            if number == 1:
                self.number1 += 1
            if number == 2:
                self.number2 += 1
            if number == 3:
                self.number3 += 1
            if number == 4:
                self.number4 += 1
            if number == 5:
                self.number5 += 1
            if number == 6:
                self.number6 += 1
    def getResult(self):
        print("1出现的次数:{0}".format(self.number1))
        print("2出现的次数:{0}".format(self.number2))
        print("3出现的次数:{0}".format(self.number3))
        print("4出现的次数:{0}".format(self.number4))
        print("5出现的次数:{0}".format(self.number5))
        print("6出现的次数:{0}".format(self.number6))
if __name__ == "__main__":
    numbercount = NumberCount()
    numbercount.count()
    numbercount.getResult()
输出结果:

1出现的次数:143
2出现的次数:184
3出现的次数:180
4出现的次数:157
5出现的次数:157
6出现的次数:179

更多更详细的内容可以点击Generate pseudo-random numbers查看官网内容。


string模块

string模块主要是对字符串进行处理。

字符串常用变量
print(string.ascii_letters)         #ascii码字母大小写
print(string.digits)                    #数字
print(string.ascii_lowercase)   #英文字母小写
print(string.ascii_uppercase)   #英文字母大写
print(string.printable)               #可打印出来的所有字符
print(string.punctuation)          #特殊字符
print(string.hexdigits)               #16进制

  • string.ascii_lowercase
    小写字母

            import    string
    1
    2
    
    >>> print(string.ascii_lowercase)
    'abcdefghijklmnopqrstuvwxyz'
    
  • string.ascii_uppercase
    大写字母

            import    string
    1
    2
    
    >>> print(string.ascii_uppercase)
    'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
    
  • string.ascii_letters
    包含所有大小写字母

    1
    2
    
    >>> string.ascii_letters
    'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
    
  • string.digits
    数字0到9的字符串。

    1
    2
    
    >>> string.digits
    '0123456789'
    
  • string.hexdigits
    包含十六进制所有字符的字符串

    1
    2
    
    >>> string.hexdigits
    '0123456789abcdefABCDEF'
    
  • string.octdigits
    包含八进制所有字符的字符串。

    1
    2
    
    >>> string.octdigits
    '01234567'
    
  • string.punctuation
    所有标点符号

    1
    2
    
    >>> string.punctuation
    '!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'
    
  • string.printable
    可打印的字符的字符串,包括数字、字母、标点符号和空格。

    1
    2
    
    >>> string.printable
    '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~ \t\n\r\x0b\x0c'
    
  • string.whitespace
    空白字符,包括space, tab, linefeed(换行), return, formfeed(换页), and vertical tab。

    1
    2
    
    >>> string.whitespace
    ' \t\n\r\x0b\x0c'
    

例子:随机列出6位验证码(含数字和英文)

import  random
import  string

print("".join(random.sample(string.ascii_letters + string.digits,6)))

输出结果: 6eSTCI


字符串方法

s = "hello world!"

  • string.capitalize()
    字符串首字母大写

    1
    2
    3
    
    >>> import string
    >>> print(s.capitalize())
    Hello world!
    
  • string.center(width)
    将原字符串用空格填充成一个长度为width的字符串,原字符串居中。
    下面原字符串hello world!长度为12,左面填充空格9个,右面填充空格8个。

    1
    2
    3
    4
    
    >>> import string
    >>> s = "hello world!"
    >>> print(s.center(29))
             hello world!
    
  • string.strip()
    去掉字符串两边的空格

    1
    2
    3
    4
    
    >>> import string
    >>> s = "hello world!"
    >>> print(s.center(30).strip())
    hello world!
    
  • string.count(s)
    返回字符串s在字符串中出现的次数

    1
    2
    3
    4
    
    >>> import string
    >>> s = "hello world!"
    >>> print(s.count("o"))
    2
    
  • string.isalnum()
    若字符串至少有一个字符且都是字母或数字则返回True,否则返回False

    1
    2
    3
    4
    
    >>> import string
    >>> s = "hello world!"
    >>> print(s.isalnum())
    False
    
  • string.isalpha()
    若字符串至少有一个字符并且都是字母则返回True,否则返回False

    1
    2
    3
    4
    
    >>> import string
    >>> s = "hello world!"
    >>> print(s.isalpha())
    False
    
  • string.isdigit()
    若字符串只包含数字则返回True,否则返回False

    1
    2
    3
    4
    
    >>> import string
    >>> s = "hello world!"
    >>> print(s.isdigit())
    False
    
  • string.isspace()
    若字符串中只包含空格,则返回True,否则返回False

    1
    2
    3
    4
    
    >>> import string
    >>> s = "hello world!"
    >>> print(s.isspace())
    False
    
  • string.istitle()
    若字符串是标题化的(单词首字母大写,其余小写)则返回True,否则返回False

    1
    2
    3
    4
    
    >>> import string
    >>> s = "hello world!"
    >>> print(s.istitle())
    False
    
  • string.title()
    返回标题华的字符串,即所有单词都是大写开始,其余字母均为小写。

    1
    2
    3
    4
    
    >>> import string
    >>> s = "hello world!"
    >>> print(s.title())
    Hello World!
    
  • string.partition(s)
    s将字符串分割成三个值

    1
    2
    3
    4
    
    >>> import string
    >>> s = "hello world!"
    >>> print(s.partition("o"))
    ('hell', 'o', ' world!')
    

hashlib模块

hashlib模块的作用:

hashlib模块用于加密,一般用的最多的位MD5加密方式

例子:将一个明文以MD5加密方式  加密

#适用于python2
import  hashlib
m1 = hashlib.md5("1234")  #加随机数,如1234
src = "hewj"
m1.update(src)
print(m1.hexdigest())

#适用于python3
import hashlib
m2 = hashlib.md5("1234".encode("utf-8"))   #py3 需要指定encode的字符编码(如utf-8)
src = bytes("hewj", encoding="utf-8")
m2.update(src)
print(m2.hexdigest())
输出结果:   336bbbad6d1d29ac8cdcc87371b6bc6c   #加密明文

StringIO模块

StringIO 主要用来在内存中写入字符串及字符串的缓存。其接口和文件操作的接口是一致的,基本所有关于文件的方法都可以用。
关于文件操作的方法可以点击 python文件操作 查看更多内容。

1、StringIO 在 py3 中已加入到 io 模块中,需要从io模块中调用。
2、对于经常读写的操作的文件,会导致服务器io高;此时使用StringIO模块,将数据记录到内存中来读写。

例子: 调用及写入的方法:

from io import StringIO

stringIO = StringIO()     #初始化StringIO对象
stringIO.write("hello")  #写入字符串  
stringIO.write("\nworld")
print(stringIO.getvalue())  #获取实例中的字符串

输出结果: 

hello

world

清空调用的内存数据

from io import StringIO

stringIO = StringIO()
stringIO.write("hello")
stringIO.write("\nworld")
stringIO.truncate(0)         #清空内容
print(stringIO.getvalue())

输出结果:  为空

bytes 转换

bytes 转换为二进制,所有东西都可以存,包括图片

byets调用及写入的方法:

test = dict(a=1)
print(bytes(str(test).encode("utf-8")))
输出结果:  b"{'a': 1}"







猜你喜欢

转载自blog.csdn.net/qq_39407518/article/details/80081497