不知不觉一个月了,re模块、sys模块、subprocess模块,第三十天了

我曾临渊而行,也曾踏渊而寻;我无惧六欲,深得七情;我必寻得七彩,乘云而疾。

os模块补充

print(os.path.normcase('c:/Windows\\system32\\')) # 纠正符号

print(os.path.normpath('c://windows\\System32\\..Temp/')) # 纠正格式

print(os.path.normpath(os.path.join(os.path.abspath(__file__),'..','..')) # 直接返回上上级菜单,自动纠正


re模块

1、什么是正则

    正则就是用一系列具有特殊含义的字符组成一套规则,该规则用来描述具有某一特征的字符串

    正则就是用来去一个大的字符串中匹配出符合规则的子字符串

2、为什么要用正则

    1、用户注册

    2、爬虫程序

3、如何用正则

\w 字母和数字及下划线

\W 除了字母和数字及下划线

\s 匹配任意非空字符

\S 匹配任意非空字符

\d 匹配任意数字,等价于[0-9]

\D 匹配任意非数字

\A 匹配字符串开始

\Z 匹配字符串结束,如果是存在换行,只匹配到换行前的结束字符串

\z 匹配字符串结束

\G 匹配最后匹配完成的位置

\n 匹配一个换行符

\t 匹配一个制表符

^ 匹配字符串的开头

$ 匹配字符的末尾

. 匹配任意字符,除了换行符,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符

[...] 用来表示一组字符,单独列出:[amk]匹配'a','m'或'k'

[^...] 不在[]中的字符:[^abc]匹配除了a,b,c之外的字符

* 匹配0个或多个的表达式

+ 匹配1个或多个的表达式

? 匹配0个或1个由前面的正则表达式定义的片段,非贪婪模式

{n} 精确匹配n个前面表达式

{n,m} 匹配n到m次由前面的正则表达式定义的片段,贪婪模式

a|b 匹配a或b

() 匹配括号内的表达式,也表示一个组,会打印输出该组内的字符

A.*B 贪婪匹配,会匹配第一个A-最后一个B内的所有字符

A.*?B 非贪婪匹配,只会匹配第一个A-第一个B内的字符

A(?:B|C) 会匹配AB或者AC

A\\\\B、A\\\B 会匹配A\B

serach()的用法,会匹配出一个地址,可以使用group()打印输出search匹配的值

mathch()的用法,会匹配出一个地址,但只会匹配出第一个该值

re.split('[-+*/]',' ')会按照-+*/来分割字符串

re.sub('[a-z]+xx','cyd',' ')会匹配并替换[a-z]+xx格式的字符为cyd

pattern = re.compile('alex') # 设置为通用的正则表达式

print(pattern.findall('alex is SB, alex is Big SB))

print(pattern.search('alex is SB, alex is Big SB))


sys 模块

sys.path显示系统路径

sys.argv 用来接收python解释器执行py文件后跟的参数

例如:python cp.py argv1 argv2 arg3

sys.argv = ['cp.py', 'argv1', 'argv2', 'argv3']

可以用于拷贝文件时,直接通过该方式输入拷贝源文件和拷贝到的文件,不需要用input让用户输入

import sys

# print(sys.argv)
# src_file=input('请输入源文件路径:')
src_file=sys.argv[1]
# dst_file=input('请输入目标文件路径:')
dst_file=sys.argv[2]
with open(src_file,'rb') as read_f,\
    open(dst_file,'wb') as write_f:
    for line in read_f:
        write_f.write(line)


subprocess模块

主要用于创建一个副进程

obj = subprocess.Popen(

'tasklist', # 打开进程

shell = True, # 打开shell窗口

stdout = subprocess.PIPE, # 给父进程和子进程之间的正确信息创建一个管道

stderr = subprocess.PIPE,# 给父进程和子进程之间的错误信息创建一个管道

print(obj)
stdout_res=obj.stdout.read() # 读出父进程与子进程之间的正确信息
print(stdout_res.decode('gbk')) # 因为sys是与操作系统直接接触,所以是用'gbk'编码,因此得用'gbk'解码
print(stdout_res)
通道之间的信息读一次就没了
stderr_res1=obj.stderr.read()
stderr_res2=obj.stderr.read()
stderr_res3=obj.stderr.read()
# print(stderr_res1.decode('gbk'))
print(stderr_res1)
print(stderr_res2)
print(stderr_res3)

两个小程序

1、设置一段验证码

import random

# 1X3Y3ZX
def make_code(size=7):
    res = ''
    for i in range(size):
        # 循环一次则得到一个随机字符(字母/数字)
        s = chr(random.randint(65, 90))
        num = str(random.randint(0, 9))
        res += random.choice([s, num])
    return res


res=make_code()
print(res)

2、打印进度条

'''

[#                  ]
[##                 ]
[###                ]
[####               ]
[#####              ]

'''
# print('[%-50s]' %'#')
# print('[%-50s]' %'##')
# print('[%-50s]' %'###')
# print('[%-50s]' %'####')
# print('[%-50s]' %'#####')

# print('%s%%' %50)

# 1、控制打印进度条的宽度
# res='[%%-%ds]' %50
# print(res %'#')
# print(res %'##')
# print(res %'###')
# print(res %'####')
# print(res %'#####')

#2、不换行+跳回行首打印
# import time
# print(('\r[%%-%ds]' %50) %'#',end='')
# time.sleep(0.5)
# print(('\r[%%-%ds]' %50) %'##',end='')
# time.sleep(0.5)
# print(('\r[%%-%ds]' %50) %'###',end='')
# time.sleep(0.5)
# print(('\r[%%-%ds]' %50) %'####',end='')
# time.sleep(0.5)
# print(('\r[%%-%ds]' %50) %'#####',end='')

import time

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

total_size=1025
recv_size=0
while recv_size < total_size:
    time.sleep(0.1) # 模拟经过了0.5的网络延迟下载了1024个字节
    recv_size+=1024
    # 调用打印进度条的功能去打印进度条
    percent=recv_size / total_size
    make_progress(percent)







猜你喜欢

转载自blog.csdn.net/weixin_42157426/article/details/80763649