来自 编程 2019-12-08 23:23 的文章
当前位置: 网上澳门金莎娱乐 > 编程 > 正文

第七章网上澳门金莎娱乐: 常用模块

常用模块(三)

1.日志模块(import logging)

一、shelve模块

1、shelve模块也是一种序列化模块,内部使用的是pickle模块,所以也存在跨平台性差的问题

2、特点:

   只要提供一个文件名即可

   读写的方式和字典一样

   将数据以类似字典的形式在文件中读写

3、应用场景

  在单击的程序中使用

4、使用方法

(1)序列化

1 import shelve
2 
3 s1= shelve.open('a.txt')      # 打开文件
4 s1['week']=["Sun", "Mon", "Tues", "Wed", "Thur", "Fri", "Sat"]
5 s1['person']={"name": "Zero", "age": 8, "height": 180}     # 写操作
6 s1.close()     # 关闭文件

(2)反序列化

1 import shelve
2 
3 s2 = shelve.open('a.txt')     # 打开文件
4 print(s2.get('week'))
5 print(s2.get('person'))
6 print(s2.get('person')['age'])    # 读取文件中内容
7 s2.close()        # 关闭文件
import logging

#默认级别为warning,默认打印到终端
logging.debug('debug')      #10
logging.info('info')        #20
logging.warning('warn')     #30
logging.error('error')      #40
logging.critical('critical')#50

二、xml模块

1、XML全称:可扩展标记语言,标记指的是代表某种含义的字符 XML<>

2、为什么要用xml 

 (1)为能够在不同的平台间继续数据的交换
 (2)为了使交换的数据能让对方看懂,就需要按照一定的语法规范来书写

3、语法格式

(1)任何的起始标签都必须有一个结束标签。
  <tagname></tagname>
  <tagname></tagname>
  <tagname/> 简化写法

(2)可以采用另一种简化语法,可以在一个标签中同时表示起始和结束标签。这种语法是在大于符号之前紧跟一个斜线(/)。

    例如<ABC/>:XML解析器会将其翻译成<ABC></ABC>。
(3)标签必须按合适的顺序进行嵌套,所以结束标签必须按镜像顺序匹配起始标签,这好比是将起始和结束标签看作是数学中的左右括号:在没有关闭所有的内部括号之前,是不            能关闭外面的括号的。

1 <tag1>
2   <tag2>
3     <tag3>
4     </tag3>
5   </tag2>
6 </tag1> 

(4)所有的特性都必须有值。
  特性指的是属性

1 <person name="aaa">
2 </person>

(5)所有的特性都必须在值的周围加上双引号。

4、注意点

(1)最外层有且只有一个标签,这个标签为根标签
(2)第一行应该有文档声明,用于高速计算机怎么理解
  例如:<?xml version="1.0" encoding="utf-8"?>

  

网上澳门金莎娱乐 1网上澳门金莎娱乐 2

1 <person>
2     <sut1>
3     </stu1>
4     <sut2>
5     </stu2>
6 </person>

标签嵌套

5、使用场景:

(1)配置文件
(2)常规的数据交换。 例如从服务器获取一段新闻

6、方法及属性

(1).ElementTree 表示整个文件的元素树
(2.)Element 表示一个节点
 a.属性
     text      开始标签和结束标签中间的文本
     attrib    所有的属性     字典类型
     tag       标签的名字
 b.方法
    get 获取某个属性的值

网上澳门金莎娱乐 3网上澳门金莎娱乐 4

 1 import xml.etree.ElementTree as et
 2 
 3 # 读取xml文档到内存中  得到一个包含所有数据的节点树
 4 # 每一个标签就称之为一个节点 或 元素
 5 tree = et.parse("text.xml")
 6 
 7 # 获取根标签
 8 root = tree.getroot()
 9 
10 # 获取所有的country   
11 print(root.find("country"))   # 找的是第一个
12 print(root.findall("country"))   # 找的是所有
13 
14 # 获取字标签
15 print(root.iter("country"))
16 for i in root.iter("country"):
17     print(i)
18 
19 # 遍历整个xml
20 for country in root:
21      print(country.tag,country.attrib,country.text)
22         for t in country:
23               print(t.tag, t.attrib, t.text)
24 
25 print(root.find("country").get("name"))    

遍历

7、增删改查

1.解析XML
    查找标签
    find      在子标签中获取名字匹配第一个
    findall   在子标签中获取名字匹配的所有标签
    iter(tagname)      在全文中查找[匹配的所有标签 返回一个迭代器

2.生成XML
    用ElmentTree
    parse()  解析一个文件
    getroot() 获取根标签
    write()  写入到文件

3.修改xml
    set 一个属性
    remove 一个标签
    append 一个标签

网上澳门金莎娱乐 5网上澳门金莎娱乐 6

 1 # 读取到内存
 2 tree = et.parse("text.xml")
 3 for country in tree.findall("country"):
 4      yeartag = country.find("year")
 5      yeartag.text = str(int(yeartag.text) + 1)   修改标签文本
 6 
 7      country.remove(country.find("year"))     删除标签
 8 
 9     # 添加子标签
10     newtag = et.Element("newTag")
11     # 文本
12     newtag.text = "123"
13     #属性
14     newtag.attrib["name"] = "DSB"
15     #添加
16     country.append(newtag)
17 
18 # 写回到内存
19 tree.write("text.xml",encoding="utf-8",xml_declaration=False)

增删改查

8、生成xml文档

网上澳门金莎娱乐 7网上澳门金莎娱乐 8

 1 import xml.etree.ElementTree as et
 2 # 创建根标签
 3 root = et.Element("root")
 4 # 创建节点树
 5 t1 = et.ElementTree(root)
 6 
 7 # 加一个peron标签
 8 persson = et.Element("person")
 9 persson.attrib["name"] = "yyh"
10 persson.attrib["sex"] = "man"
11 persson.attrib["age"] = "20"
12 persson.text = "这是一个person标签"
13 
14 root.append(persson)
15 
16 # 写入文件
17 t1.write("newXML.xml",encoding="utf-8",xml_declaration=True)

生成

网上澳门金莎娱乐 9网上澳门金莎娱乐 10

三、hashlib模块

 1、hashlib分为hash和library

(1)hash

①.hash为一种算法,用于将任意长度的数据压缩映射到一段固定长度的字符 (提取特征)

②.特点

a.输入数据不同,得到的hash值有可能相同
b.不能通过hash值来得到输入的值
c.如果算法相同,无论输入的数据长度是多少,得到的hash值长度相同

③.作用

常用的提升安全性的手段,用于数据的加密,MD5是常用的一种hash算法

(2)library

2、利用hashlib加密

网上澳门金莎娱乐 11网上澳门金莎娱乐 12

1 import hashlib
2 md = hashlib.md5()
3 md.update("hello".encode("utf-8"))
4 print(md.hexdigest())

加密

3、解密

破解MD5可以尝试撞库  

原理: 有一个数据库里面存放了常见的明文和密文的对应关系 

可在logging.basicConfig()函数中通过具体参数来更改logging模块默认行为,可用参数有
filename:用指定的文件名创建FiledHandler(后边会具体讲解handler的概念),这样日志会被存储在指定的文件中。
filemode:文件打开方式,在指定了filename时使用这个参数,默认值为“a”还可指定为“w”。
format:指定handler使用的日志显示格式。 
datefmt:指定日期时间格式。 
level:设置rootlogger(后边会讲解具体概念)的日志级别 
stream:用指定的stream创建StreamHandler。可以指定输出到sys.stderr,sys.stdout或者文件,默认为sys.stderr。若同时列出了filename和stream两个参数,则stream参数会被忽略。

#格式
%(name)s:Logger的名字,并非用户名,详细查看

%(levelno)s:数字形式的日志级别

%(levelname)s:文本形式的日志级别

%(pathname)s:调用日志输出函数的模块的完整路径名,可能没有

%(filename)s:调用日志输出函数的模块的文件名

%(module)s:调用日志输出函数的模块名

%(funcName)s:调用日志输出函数的函数名

%(lineno)d:调用日志输出函数的语句所在的代码行

%(created)f:当前时间,用UNIX标准的表示时间的浮 点数表示

%(relativeCreated)d:输出日志信息时的,自Logger创建以 来的毫秒数

%(asctime)s:字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”。逗号后面的是毫秒

%(thread)d:线程ID。可能没有

%(threadName)s:线程名。可能没有

%(process)d:进程ID。可能没有

%(message)s:用户输出的消息

四、configparser模块

1、configparser模块是配置文件解析模块,用于提供程序运行所需要的一些信息的文件。 后缀 .ini,.cfg

2、配置文件内容格式

  只包括两种元素:
    section    分区
    option     选项
  一个文件可以有多个section
  一个section可以有多个选项

3、核心方法

sections()     获取所有分区
options()      获取所有选项
get(section,option)            获取一个值

4、配置文件

网上澳门金莎娱乐 13网上澳门金莎娱乐 14

 1 import configparser
 2 
 3 # 得到配置文件对象
 4 cfg = configparser.ConfigParser()
 5 
 6 # 读取一个配置文件
 7 cfg.read("download.ini")
 8 
 9 print(cfg.sections())
10 print(cfg.options("section1"))
11 
12 print((cfg.get("section1","maxspeed")))
13 print((cfg.getint("section1","maxspeed")))
14 print(cfg.getint("section2","minspeed"))
15 
16 
17 # 修改最大速度为2048
18 cfg.set("section1","maxspeed","2048")
19 
20 # 修改后写入文件
21 cfg.write(open("download.ini","w",encoding="utf-8"))

配置文件

 

logging.basicConfig详细解释

logging.basicConfig(filename='access.log',
                    format='%(asctime)s - %(name)s - %(levelname)s -%(module)s:  %(message)s',
                    datefmt='%Y-%m-%d %H:%M:%S %p',
                    level=10)

网上澳门金莎娱乐 15网上澳门金莎娱乐 16

import logging
#介绍
#logging模块的Formatter,Handler,Logger,Filter对象
#Logger:产生日志的对象
logger1=logging.getLogger('访问日志')
#Filter:过滤日志的对象
#Handler:接收日志然后控制打印到不同的地方,FileHandler用来打印到文件中,#StreamHandler用来打印到终端
h1=logging.StreamHandler()
h2=logging.FileHandler('access.log',encoding='utf-8')
#Formatter对象:可以定制不同的日志格式对象,然后绑定给不同的Handler对象使用,以此来控制不同的Handler的日志格式
formatter1=logging.Formatter(
        fmt='%(asctime)s - %(name)s - %(levelname)s -%(module)s:  %(message)s',
        datefmt='%Y-%m-%d %H:%M:%S %p',)

#使用
#logger负责产生日志,交给Filter过滤,然后交给不同的Handler输出,handler需要绑定日志格式
h1.setFormatter(formatter1)
h2.setFormatter(formatter1)
logger1.addHandler(h1)
logger1.addHandler(h2)
logger1.setLevel(10)
h1.setLevel(20)         #Handler的日志级别设置应该高于Logger设置的日志级别
logger1.debug('debug')
logger1.info('info')
logger1.warning('warning')
logger1.error('error')
logger1.critical('critical')

logging模块的Formatter,Handler,Logger,Filter对象

网上澳门金莎娱乐 17网上澳门金莎娱乐 18

#应用
import os
import logging.config

# 定义三种日志输出格式 开始

standard_format = '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]' 
                  '[%(levelname)s][%(message)s]' #其中name为getlogger指定的名字

simple_format = '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s'

id_simple_format = '[%(levelname)s][%(asctime)s] %(message)s'

# 定义日志输出格式 结束

logfile_dir = os.path.dirname(os.path.abspath(__file__))  # log文件的目录

logfile_name = 'all2.log'  # log文件名

# 如果不存在定义的日志目录就创建一个
if not os.path.isdir(logfile_dir):
    os.mkdir(logfile_dir)

# log文件的全路径
logfile_path = os.path.join(logfile_dir, logfile_name)

# log配置字典
LOGGING_DIC = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'standard': {
            'format': standard_format
        },
        'simple': {
            'format': simple_format
        },
    },
    'filters': {},
    'handlers': {
        #打印到终端的日志
        'console': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',  # 打印到屏幕
            'formatter': 'simple'
        },
        #打印到文件的日志,收集info及以上的日志
        'default': {
            'level': 'DEBUG',
            'class': 'logging.handlers.RotatingFileHandler',  # 保存到文件
            'formatter': 'standard',
            'filename': logfile_path,  # 日志文件
            'maxBytes': 1024*1024*5,  # 日志大小 5M
            'backupCount': 5,
            'encoding': 'utf-8',  # 日志文件的编码,再也不用担心中文log乱码了
        },
    },
    'loggers': {
        #logging.getLogger(__name__)拿到的logger配置
        '': {
            'handlers': ['default', 'console'],  # 这里把上面定义的两个handler都加上,即log数据既写入文件又打印到屏幕
            'level': 'DEBUG',
            'propagate': True,  # 向上(更高level的logger)传递
        },
    },
}


def load_my_logging_cfg():
    logging.config.dictConfig(LOGGING_DIC)  # 导入上面定义的logging配置
    logger = logging.getLogger(__name__)  # 生成一个log实例
    logger.info('It works!')  # 记录该文件的运行状态

if __name__ == '__main__':
    load_my_logging_cfg()

logging配置文件

 2.正则模块(import re)

  正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法

# re模块的方法
print(re.findall('a[-+/*]b','axb azb aAb a+b a-b'))
# re.search()
print(re.search('a[-+/*]b','axb azb aAb a+b a-b'))  #有结果返回一个对象,无结果返回None
print(re.search('a[-+/*]b','axb azb aAb a+b a-b').group())  #group()方法只匹配成功一次就返回
#re.match()
print(re.match('a[-+/*]b','axb azb aAb a+b a-b'))  #从头开始取,无结果返回None
print(re.match('a[-+/*]b','a*b azb aAb a+b a-b').group())
#re.split()
print(re.split(':','root:x:0:0::/root',maxsplit=1))
#re.sub()
print(re.sub('root','admin','root:x:0:0::/root',1))
print(re.sub('^([a-z]+)([^a-z]+)(.*?)([^a-z]+)([a-z]+)$',r'52341','root:x:0:0::/bash'))
#re.compile()
obj=re.compile('ad{2}b')
print(obj.findall('a12b a123b a124a a82b'))
print(obj.search('a12b a123b a124a a82b'))

网上澳门金莎娱乐 19网上澳门金莎娱乐 20

# w 匹配字母数字及下划线
print(re.findall('w','lary 123 + _ - *'))
# W 匹配非字母数字及下划线
print(re.findall('W','lary 123 + _ - *'))
# s 匹配任意空白字符
print(re.findall('s','larytn 123n3 + _ - *'))
# S 匹配任意非空字符
print(re.findall('S','larytn 123n3 + _ - *'))
# d 匹配任意数
print(re.findall('d','larytn 123n3 + _ - *'))
# D 匹配任意非数字
print(re.findall('D','larytn 123n3 + _ - *'))
# n 匹配一个换行符
print(re.findall('n','larytn 123n3 + _ - *'))
# t 匹配一个制表符
print(re.findall('t','larytn 123n3 + _ - *'))
# ^  匹配字符串开头
print(re.findall('^e','elarytn 123n3 ego + _ - *'))
# $  匹配字符串的末尾
print(re.findall('o$','elarytn 123n3 ego + _ - *o'))
# .  匹配任意一个字符(除了换行符)
print(re.findall('a.b','a1b a b a-b aaaab'))
# ?  匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式
print(re.findall('ab?','a ab abb abbb a1b'))
# *  匹配0个或多个的表达式
print(re.findall('ab*','a ab abb abbb a1b'))
# +  匹配1个或多个的表达式
print(re.findall('ab+','a ab abb abbb a1b'))
# {n,m}匹配n到m次由前面的正则表达式定义的片段,贪婪方式
print(re.findall('ab{0,1}','a ab abb abbb a1b'))
print(re.findall('ab?','a ab abb abbb a1b'))
print(re.findall('ab{2,3}','a ab abb abbb a1b'))
#.*?匹配任意个字符,非贪婪方式
print(re.findall('a.*?b','a123b456b'))
#.* 匹配任意个字符,贪婪方式
print(re.findall('a.*b','a123b456b'))
# a|b 匹配a或b
print(re.findall('compan(ies|y)','too many companies shut down,and the next is my company'))
print(re.findall('compan(?:ies|y)','too many companies shut down,and the next is my company'))
# [...] 表示一组字符,取括号中任意一个字符
print(re.findall('a[a-z]b','axb azb aAb a+b a-b'))
print(re.findall('a[a-zA-Z]b','axb azb aAb a+b a-b'))
print(re.findall('a[-+/*]b','axb azb aAb a+b a-b'))  #-应该写在[]中的两边
# [^...]不在[]中的字符
print(re.findall('a[^-+/*]b','axb azb aAb a+b a-b'))
# (n)精确匹配n个前面表达式
# () 匹配括号内的表示式,也表示一个组
# A 匹配字符串开始
# Z 匹配字符串结束,如果存在换行,只匹配到换行前的结束字符串
# z 匹配字符串结束
# G 匹配最后匹配完成的位置

print(re.findall(r'a\c','ac alc aBc')) #r''代表原生表达式

正则表达式

 3.time模块(import time)

import time

print(time.time())      #时间戳
print(time.localtime()) #本地时区时间
print(time.gmtime())    #标准时间
print(time.strftime("%Y-%m-%d %X"))    #格式化时间

import datetime

print(datetime.datetime.now())
print(datetime.datetime.fromtimestamp(11111))
print(datetime.datetime.now()+datetime.timedelta(days=3))
print(datetime.datetime.now().replace(year=1999))

  网上澳门金莎娱乐 21

网上澳门金莎娱乐 22网上澳门金莎娱乐 23

1 #--------------------------按图1转换时间
 2 # localtime([secs])
 3 # 将一个时间戳转换为当前时区的struct_time。secs参数未提供,则以当前时间为准。
 4 time.localtime()
 5 time.localtime(1473525444.037215)
 6 
 7 # gmtime([secs]) 和localtime()方法类似,gmtime()方法是将一个时间戳转换为UTC时区(0时区)的struct_time。
 8 
 9 # mktime(t) : 将一个struct_time转化为时间戳。
10 print(time.mktime(time.localtime()))#1473525749.0
11 
12 
13 # strftime(format[, t]) : 把一个代表时间的元组或者struct_time(如由time.localtime()和
14 # time.gmtime()返回)转化为格式化的时间字符串。如果t未指定,将传入time.localtime()。如果元组中任何一个
15 # 元素越界,ValueError的错误将会被抛出。
16 print(time.strftime("%Y-%m-%d %X", time.localtime()))#2016-09-11 00:49:56
17 
18 # time.strptime(string[, format])
19 # 把一个格式化时间字符串转化为struct_time。实际上它和strftime()是逆操作。
20 print(time.strptime('2011-05-05 16:37:06', '%Y-%m-%d %X'))
21 #time.struct_time(tm_year=2011, tm_mon=5, tm_mday=5, tm_hour=16, tm_min=37, tm_sec=6,
22 #  tm_wday=3, tm_yday=125, tm_isdst=-1)
23 #在这个函数中,format默认为:"%a %b %d %H:%M:%S %Y"。

View Code

网上澳门金莎娱乐 24

网上澳门金莎娱乐 25网上澳门金莎娱乐 26

1 #--------------------------按图2转换时间
2 # asctime([t]) : 把一个表示时间的元组或者struct_time表示为这种形式:'Sun Jun 20 23:21:05 1993'。
3 # 如果没有参数,将会将time.localtime()作为参数传入。
4 print(time.asctime())#Sun Sep 11 00:43:43 2016
5 
6 # ctime([secs]) : 把一个时间戳(按秒计算的浮点数)转化为time.asctime()的形式。如果参数未给或者为
7 # None的时候,将会默认time.time()为参数。它的作用相当于time.asctime(time.localtime(secs))。
8 print(time.ctime())  # Sun Sep 11 00:46:38 2016
9 print(time.ctime(time.time()))  # Sun Sep 11 00:46:38 2016

View Code

 4.random模块(import random)

import random

print(random.random())          #大于0小于1之间的小数
print(random.randint(1,3))      #大于1且小于等于3之间的整数(包括头尾)
print(random.randrange(1,3))    #大于1且小于等于3之间的整数(顾头不顾尾)
print(random.choice([1,'hell',3]))   #取其中一个
print(random.sample([1,2,3],2)) #取任意两个组合
print(random.uniform(1,4))      #取1-4之间的小数

l=[1,2,3,4,5]
random.shuffle(l)       #打乱原来的顺序
print(l)

网上澳门金莎娱乐 27网上澳门金莎娱乐 28

#随机验证码小功能
def make_code(n):
    res=''
    for i in range(n):
        s1=str(random.randint(0,9))
        s2=chr(random.randint(65,90))
        res+=random.choice([s1,s2])
    return res

res=make_code(6)
print(res)

View Code

 5.os模块(import os)

os.path.abspath(path)  #返回path规范化的绝对路径
os.path.dirname(path)  #返回path的目录。其实就是os.path.split(path)的第一个元素
os.path.exists(path)  #如果path存在,返回True;如果path不存在,返回False
os.path.join(path1[, path2[, ...]])  #将多个路径组合后返回,第一个绝对路径之前的参数将被忽略

网上澳门金莎娱乐 29网上澳门金莎娱乐 30

os.getcwd() #获取当前工作目录,即当前python脚本工作的目录路径
os.chdir("dirname")  #改变当前脚本工作目录;相当于shell下cd
os.curdir  #返回当前目录: ('.')
os.pardir  #获取当前目录的父目录字符串名:('..')
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下为"tn",Linux下为"n"
os.pathsep    #输出用于分割文件路径的字符串 win下为;,Linux下为:
os.name    #输出字符串指示当前使用平台。win->'nt'; Linux->'posix'
os.system("bash command")  #运行shell命令,直接显示
os.environ  #获取系统环境变量
os.path.split(path)  #将path分割成目录和文件名二元组返回
os.path.basename(path)  #返回path最后的文件名。如何path以/或结尾,那么就会返回空值。即os.path.split(path)的第二个元素
os.path.isabs(path)  #如果path是绝对路径,返回True
os.path.isfile(path)  #如果path是一个存在的文件,返回True。否则返回False
os.path.isdir(path)  #如果path是一个存在的目录,则返回True。否则返回False
os.path.getatime(path)  #返回path所指向的文件或者目录的最后存取时间
os.path.getmtime(path)  #返回path所指向的文件或者目录的最后修改时间
os.path.getsize(path) #返回path的大小

View Code

#在Linux和Mac平台上,该函数会原样返回path,在windows平台上会将路径中所有字符转换为小写,并将所有斜杠转换为饭斜杠。
print(os.path.normcase('c:/windows\system32\'))
#规范化路径,如..和 /
print(os.path.normpath('c://windows\System32\../Temp/'))
a = '/Users/jieli/test1/\a1/\\aa.py/../..'
print(os.path.normpath(a))

#os路径处理
#方式一:
import os,sys
Base_dir = os.path.normpath(os.path.join(
    os.path.abspath(__file__),
    os.pardir, #上一级
    os.pardir,
    os.pardir
))
print(Base_dir)

#方式二:
os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

6.sys模块(import sys)

import sys

sys.argv        #命令行参数List,第一个元素是程序本身路径
sys.exit(n)     #退出程序,正常退出时exit(0)
sys.version     #获取Python解释程序的版本信息
sys.maxint      #最大的Int值
sys.path        #返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
sys.platform    #返回操作系统平台名称

网上澳门金莎娱乐 31网上澳门金莎娱乐 32

def process(percent,width=50):
    if percent >=1:
        percent=1
    show_str=('[%%-%ds]'%width)%('+'*int(width*percent))
    print('r%s %d%%'%(show_str,percent*100),end='')

recv_size=0
total_size=10241
while recv_size < total_size:
    time.sleep(0.1)
    recv_size+=1024
    process(recv_size/total_size)

打印进度条

本文由网上澳门金莎娱乐发布于编程,转载请注明出处:第七章网上澳门金莎娱乐: 常用模块

关键词: