python基础篇【第六篇】模块补充、正则表达式

上一篇已经讲述了什么是模块,下面我们再一起认识一些python中常用的模块。

一、os模块

前面也有用到过os模块,但那都是小儿科,os模块在日后的python撸码中将一直会伴随着你!

python编程时,经常和文件、目录打交道,这是就离不了os模块。os模块包含普遍的操作系统功能,与具体的平台无关。

要想使用模块,需先导入模块   如:import os     导入模块

1. os.name()——判断现在正在实用的平台,Windows 返回 ‘nt‘; Linux 返回’posix‘

1 print(os.name)
2 #结果
3 nt

2. os.getcwd()——得到当前工作的目录。

print(os.getcwd())

#结果
D:\学习功课\s13\day6

3. os.listdir()——指定所有目录下所有的文件和目录名,以列表的形式全部列举出来,其中没有区分目录和文件。

print(os.listdir("."))
#结果
[‘commons.py‘, ‘manager.py‘, ‘os模块.py‘, ‘sys模块.py‘, ‘test‘, ‘__pycache__‘, ‘冒泡排序.py‘, ‘加密模块.py‘, ‘反射.py‘]

4. os.remove()——删除指定文件

5. os.rmdir()——删除指定目 删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname

6. os.mkdir()——创建目录

7. os.path.isfile()——判断指定对象是否为文件。是返回True,否则False

8. os.path.isdir()——判断指定对象是否为目录。是True,否则False。

9. os.path.exists()——检验指定的对象是否存在。是True,否则False.

10. os.path.split()——返回路径的目录和文件名

11.os.system()——执行shell命令

12. os.chdir()——改变目录到指定目录

13.os.path.getsize()——获得文件的大小,如果为目录,返回0

14.os.path.abspath()——获得绝对路径

15.os.path.join(path, name)——连接目录和文件名。

16.os.path.basename(path)——返回文件名

17.os.path.dirname(path)——返回文件路径

18.os.environ——获取系统环境变量

19.os.removedirs(‘dirname1‘) ——若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推

20.os.path.getatime(path) 返回path所指向的文件或者目录的最后存取时间

21.os.path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间

二、sys模块


1.sys.argv  ——获取执行此程序路径,

命令行参数List,第一个元素是程序本身路径
1 print(‘hello‘)
2 for i in sys.argv:
3     print(i)
4 print(sys.argv)
5
6 #执行结果
7 hello
8 D:/学习功课/s13/day6/sys模块.py
9 [‘D:/学习功课/s13/day6/sys模块.py‘]

2.sys.exit(n) 退出程序,正常退出时exit(0) ,给shell中的退出差不多,退出返回值为0正常退出

3.sys.version 获取Python解释程序的版本信息

1 print(sys.version)
2 #结果
3 3.5.1 (v3.5.1:37a07cee5969, Dec  6 2015, 01:54:25) [MSC v.1900 64 bit (AMD64)]

4.sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值

>>> sys.path
[‘‘, ‘C:\\Python\\Python35\\python35.zip‘, ‘C:\\Python\\Python35\\DLLs‘, ‘C:\\Py
thon\\Python35\\lib‘, ‘C:\\Python\\Python35‘, ‘C:\\Python\\Python35\\lib\\site-p
ackages‘]

5.os.path.append(os.path.dirname(path))  添加路径到环境变量

6.sys.stdout.write(‘please:‘)  屏幕输出

1 >>> sys.stdout.write("abc")
2 abc3
3 >>> sys.stdout.write("abce")
4 abce4
5 >>> sys.stdout.write("abcer")
6 abcer5

7.sys.platfoem   返回操作系统名字

print(sys.platform)
#结果
win32

三、hashbib 加密模块

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

def md5(passwd):
    test=hashlib.md5(bytes("qweqweqwe",encoding="utf-8"))
    test.update(bytes(passwd,encoding="utf-8"))
    names=test.hexdigest()
    return names
    print(names)
r=md5("qwe")
print(r)

l=input("用户:")
p=input("密码:")
w=md5(p)
print(w)

if l=="tom" and w==r:
    print("good")
else:
    print("gun!")

四、getattr()反射

利用字符串的形式去对象中寻找操作成员

如:getattr(commons,"login") 去commons模块中寻找字符“login的函数

hasattr():判断模块中的函数是否存在,存在为真,否则为假

delattr():删除某个模块的成员(函数)

setattr():这某个模块中设置一个成员(函数)

 1 如:有一个模块‘commons’
 2 内容如下:
 3 def login():
 4     print("登陆")
 5
 6 def logout():
 7     print("退出")
 8
 9 def home():
10     print("主页面")
11
12 在另一个程序运行的导入commons
13 import commons
14
15 while True:
16     inp=input("输入url:").strip()
17     if hasattr(commons,inp):
18         test=getattr(commons,inp)
19         test()
20     else:
21         print(404)
22         break

__import__ 可以导入字符串的模块

__import__默认只导入第一个路径,如要导入lib.num,只导入lib

    要想导入路径,后面去加个fromlist=True,如__import__("lib.num",fromlist=True )

 1 while True:
 2     inp=input("输入url:").strip()
 3     m,f=inp.split("/")
 4     obj=__import__(m,f)
 5     if hasattr(obj,f):
 6         test=getattr(obj,f)
 7         test()
 8     else:
 9         print(404)
10         break
11
12 #如果输入的是commons/login        #自动就会运行commons下得这个login()函数
13 输入url:commons/login
14 登陆

五、正则表达式

  正则表达式并不是Python的一部分。正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法,但功能十分强大。得益于这一点,在提供了正则表达式的语言里,正则表达式的语法都是一样的,区别只在于不同的编程语言实现支持的语法数量不同;但不用担心,不被支持的语法通常是不常用的部分。

语法 说明 表达式实例 完整匹配的字符串
     .
匹配除换行符“\n”任意单个字符

a.c abc
 \
转义字符, 使后一个字符改变原来的意思

如果字符串中有特殊字符如*需要匹配,可以使用\*或者字符集[*]


a\.c

a\\c


a.c

a\c

[.....]
字符集对应的位置可以是字符集中任意字符

字符集中的字符可以逐个列出,也可以给出范围,如[abc]或[a-c]

在字符集中第一个字符是^,在这里是取反的意思,如[^abc]表示不是abc的其他字符,

所有特殊字符在字符集中都是去其原有的特殊含义

a[bcd]e
abe

ace

ade

 \d  数字:[0-9]  a\dc  a1c
 \D  非数字:[^\d]  a\Dc  abc
 \s  空白字符:[<空格>\t\r\n\f\v]  a\sc  a c
 \S  非空白字符:[^\s]  a\Sc  abc
 \w 单词字符:[A-Za-z0-9]   a\wc  abc
 \W  非单词字符:[^\w]  a\WC  a c
 *  匹配前一个字符0或无限次给 "." 结合就是任意多字符  abc*    ab
 +  匹配前一个字符1次或无限次  abc+
abc

abcccc

 ? 匹配前一个字符0次或1次   abc  
ab

abc

 {m}  匹配前一个字符m次  ab{2}c abbc 
 {m,n}
匹配前一个字符m至n次

m和n可以忽略:若只有n 最多n次;只有m至少匹配m次

 ab{1,2}c
abc

abbc

 ^
匹配以什么字符串开头

如果是多行,就匹配每一行的开头

 ^abc abc 
 $
匹配字符串末尾

如果是多行,就匹配每一行de末尾

 abc$  abc
 \A  仅匹配字符串开头  \Aabc  abc
 \Z  仅匹配字符串末尾  abc\Z  abc
 \b
匹配\w和\Wz之间

只是匹配字符串开头结尾及空格回车等的位置, 不会匹配空格符本身

 abc s  abc
 |
|代表左右表达式任意匹配一个

先尝试匹配左边,一旦成功匹配结束,反之继续

如果|没有被包括在()中,则它的范围是整个正则表达式

 abc|qwe
abc

qwe

 (...)
被括起来的表达式将作为分组,

从表法师左边开始每遇到一个分组的左括号“(”,编号+1

分组表达式作为一个整体,可以后接数量词


(abc){2}

a(123|456)c


abcabc

a456c

       
       

1、match(pattern, string, flags=0)

从起始位置开始根据模型去字符串中匹配指定内容,匹配单个

只从开头找,开头不满足指定内容也是不在寻找

  pattern 正则表达式

  string 要匹配的字符串

  flags 标志位,用于控制正则表达式的匹配方式

match object 对象拥有以下方法:
group() 返回被 RE 匹配的字符串
start() 返回匹配开始的位置
end() 返回匹配结束的位置
span() 返回一个元组包含匹配 (开始,结束) 的位置

1 ll="1234c23123c123a44444cac"
2 test=re.match(‘\d+‘,ll)
3 if test:
4     print(test.group())
5
6 #显示结果
7 1234

2、search(pattern, string, flags=0)

根据模型去字符串中匹配指定内容,匹配单个

在字符串中寻找,找到一个满足条件的就返回

1 ll="qwec23123c123a44444cac"
2 test=re.search(‘\d+‘,ll)
3 if test:
4     print(test.group())
5
6 #显示结果
7 23123

3、group和groups

group() 返回re整体匹配的字符串,可以一次输入多个组号,对应组号匹配的字符串。
1. group()返回re整体匹配的字符串,
2. group (n,m) 返回组号为n,m所匹配的字符串,如果组号不存在,则返回indexError异常
3.groups()groups() 方法返回一个包含正则表达式中所有小组字符串的元组,从 1 到 
所含的小组号,通常groups()不需要参数,返回一个元组,元组中的元就是正则
表达式中定义的组。

ll="23123c123a44444cac"
test=re.search("([0-9]*)([a-z]*)([0-9]*)",ll)
print(test.group())
print(test.group(1))
print(test.group(2))
print(test.group(3))
print(test.groups())

#返回结果
23123c123
23123
c
123
(‘23123‘, ‘c‘, ‘123‘)

4、findall(pattern, string, flags=0)

匹配多个,只要满足条件,就能取到

上述两中方式均用于匹配单值,即:只能匹配字符串中的一个,如果想要匹配到字符串中所有符合条件的元素,则需要使用 findall。

print(re.findall("a[bcd]e","adedsdfasdfbsdfabe"))
ll="a1c23123c123a44444cac"
print(re.findall(r‘a\dc‘,ll))
#返回结果
[‘ade‘, ‘abe‘]
[‘a1c‘]

5、sub(pattern, repl, string, count=0, flags=0)

  subn(pattern, repl, string, count=0, flags=0)  #能统计出,供替换了几次

用于替换匹配的字符串

ll = "23123c123a44444cac213"
test=re.sub(‘\d+‘,‘SB‘,ll)
test1=re.subn(‘\d+‘,‘SB‘,ll)
print(test)
print(test1)

#显示结果
SBcSBaSBcacSB
(‘SBcSBaSBcacSB‘, 4)

6、split(pattern, string, maxsplit=0, flags=0)

根据指定匹配进行分组 ,生成list类型

content = "‘1 - 2 * ((60-30+1*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2) )‘"
test=re.split(‘\*‘,content)
print(test)

#显示结果
["‘1 - 2 ", ‘ ((60-30+1‘, ‘(9-2‘, ‘5/3+7/3‘, ‘99/4‘, ‘2998+10‘, ‘568/14))-(-4‘, ‘3)/(16-3‘, "2) )‘"]
 1 inpp = ‘1-2*((60-30 +(-40-5)*(9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2))‘
 2
 3 new_content = re.split(‘\(([\+\-\*\/]?\d+[\+\-\*\/]?\d+){1}\)‘, inpp)
 4 new_contents = re.split(‘\(([\+\-\*\/]?\d+[\+\-\*\/]?\d+){1}\)‘, inpp,1)     #取一次匹配到的结果
 5 print(new_content)
 6 print(new_contents)
 7
 8 #上边的正则意思是匹配括号中的括号
 9
10 #结果
11 [‘1-2*((60-30 +‘, ‘-40-5‘, ‘*(9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - ‘, ‘-4*3‘, ‘/ (16-3*2))‘]
12 [‘1-2*((60-30 +‘, ‘-40-5‘, ‘*(9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2))‘]
时间: 2024-10-08 00:17:27

python基础篇【第六篇】模块补充、正则表达式的相关文章

python基础知识第六篇(知识点总结)

####################### 整理 ################# # 一.数字# int(..) # 二.字符串# replace(替换)/find/join/strip(移除)/startswith/split(分割)/upper(转换为大写的)/lower(转换为小写)/format(占位符替换为指定的值)# tempalte = "i am {name}, age : {age}"# # v = tempalte.format(name='alex',ag

Python学习系列(六)(模块)

一,模块的基本介绍 1,import引入其他标准模块 标准库:Python标准安装包里的模块. 引入模块的几种方式: i)引入模块:import   moduleName ii)引入模块下的函数:from moduleName import function1,function2,-- iii)引入模块下的所有函数:from moduleName import * 使用模块里的函数的方法: moduleName.function(agrs) 示例: >>> import math >

Python开发【第六篇】:模块

模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要多个函数才能完成(函数又可以在不同的.py文件中),n个 .py 文件组成的代码集合就称为模块. 如:os 是系统相关的模块:file是文件操作相关的模块 模块分为三种: 自定义模块 第三方模块 内置模块 自定义模块 1.定义模块 情景一: 情景二: 情景三: 2.导入模块 Python之所以应用越来越广泛,

Python进阶之第六篇-面向对象编程

面向对象进阶篇: 初级篇中我们介绍了面向对象基本知识: 1.面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 2.介绍了类中的对象.方法和属性及类中内置的方法 3.类 是一个模板,模板中包装了多个“函数”供使用(可以讲多函数中公用的变量封装到对象中) 4.对象,根据模板创建的实例(即:对象),实例用于调用被包装在类中的函数 5.面向对象三大特性:封装.继承和多态 本篇将详细介绍Python 类的成员.成员修饰符.类的特殊成员. 一.类的成员: 类的成员可以分为三大类:字段.

Python基础之【第一篇】

Python简介: python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承. Python可以应用于众多领域,如:数据分析.组件集成.网络服务.图像处理.数值计算和科学计算等众多领域.目前业内几乎所有大中型互联网企业都在使 用Python,如:Youtube.Dropbox.BT.Quora(中国知乎).豆瓣.知乎.Google.Yahoo!.Facebook

Python基础-第五天-常用模块

本篇内容: 1.sys模块 2.os模块 3.time模块和datetime模块 4.random模块和string模块 5.shutil模块 6.json模块和pickle模块 7.shelve模块 8.hashlib模块和hmac模块 9.logging模块 10.re模块 一.sys模块 1.sys模块简介 sys模块是Python标准库中自带了一个模块,sys模块负责程序与python解释器的交互,提供了一系列的函数和变量,用于操控python的运行时环境 2.sys模块的使用 ①pyt

python基础汇总(六)

这是最后一篇python基础汇总了. 在进入正题之前,忍不住唠叨一句: python的前途越来越光明,随着马云的无人酒店,无人海底捞陆续面世,python重要性越来越大. 未来是属于人工智能的,完成人工智能的代码是python自动化代码. 我们先来复习一下列表和字典的一些基础知识. 一.列表 ten_things="Apples Oranges Crows Telephones Light Sugar" print("Wait there's not 10 things in

Python基础(十)re模块

Python基础阶段快到一段落,下面会陆续来介绍python面向对象的编程,今天主要是补充几个知识点,下面开始今天的内容. 一.反射 反射的作用就是列出对象的所有属性和方法,反射就是告诉我们,这个对象到底是什么,提供了什么功能, 可以伪造Web框架的路由系统. 举个例子: 1 2 >>> dir(json) ['JSONDecodeError', 'JSONDecoder', 'JSONEncoder', '__all__', '__author__', '__builtins__',

Python基础(13)_python模块之re模块(正则表达式)

8.re模块:正则表达式 就其本质而言,正则表达式(或 RE)是一种小型的.高度专业化的编程语言,(在Python中)它内嵌在Python中,并通过 re 模块实现.正则表达式模式被编译成一系列的字节码,然后由用 C 编写的匹配引擎执行. 字符匹配(普通字符,元字符): 1.普通字符:大多数字符和字母都会和自身匹配              >>> re.findall('alvin','yuanaleSxalexwupeiqi')                      ['alvi

Python 基础 - Day 5 Learning Note - 模块 之 标准库:RE (14) 正则表达式

RE 模块介绍 正则表达式(RE)用作于处理文件和数据,为高级文本模式匹配,以及搜索-替代等功能提供基础. 实质就是一些由字符和特殊符号(元字符:metacharacter)组成的字符串,它们描述了这些字符和字符的某种重复方式,因此能按某种模式匹配一个有相似特征的字符串的集合,也能按某种模式匹配一系列有相似特征的字符串,我们称为模式匹配 (patten match). 在python中, pattern-match 有两种主要方式完成: 搜索(search)和匹配(match). 搜索,在字符串