文件操作
- 对文件操作流程
- 打开文件,得到文件句柄并赋值给一个变量;
- 通过句柄对文件进行操作;
- 关闭文件;
- 通过句柄对文件进行操作;
- 打开文件,得到文件句柄并赋值给一个变量;
-
:自动关闭文件;with
with open('log', 'r') as f:
...
复制
- 文件操作之
open()
模式匹配与正则表达式
- 正则表达式:简称regex,是文本模式的描述方法;
- 正则表达式匹配步骤:
- 导入正则表达式模块
;re
- 用
函数创建一个re.compile()
对象(记得使用原始字符串);Regex
- 向
对象的Regex
方法传入想要查找的字符串,返回一个search()
对象;Match
- 调用
对象的Match
方法,返回实际匹配文本的字符串;group()
- 导入正则表达式模块
- 管道:
,用于匹配多个表达式中的一个,匹配多个分组;|
- 问号:
,实现可选匹配;?
>>> import re
>>> batRegex = re.compile(r'Bat(wo)?man')
>>> mo1 = batRegex.search('The Adventures of Batman.')
>>> print(mo1.group())
Batman
>>> mo2 = batRegex.search('The Adventures of Batwoman.')
>>> print(mo2.group())
Batwoman
复制
- 星号:
,匹配零次或多次,即星号之前的分组,可以在文本中出现任意次;*
>>> import re
>>> batRegex = re.compile(r'Bat(wo)*man')
>>> mo1 = batRegex.search('The Adventures of Batwowoman')
>>> print(mo1.group())
Batwowoman
复制
- 加号:
,匹配一次或多次,加号前面的分组必须"至少出现一次”;+
>>> import re
>>> batRegex = re.compile(r'Bat(wo)+man')
>>> mo1 = batRegex.search('The Adventures of Batwowoman')
>>> print(mo1.group())
Batwowoman
>>> mo2 = batRegex.search('The Adventures of Batman')
>>> print(mo2 == None)
True
复制
- 花括号:
,匹配特定次数;{ }
>>> import re
>>> batRegex = re.compile(r'ha{3}')
>>> mo1 = batRegex.search('hahaha')
>>> print(mo1.group())
hahaha
>>> mo2 = batRegex.search('haha')
>>> print(mo2 == None)
True
复制
-
方法返回结果:findall()
- 若调用在一个没有分组的正则表达式上,则返回一个匹配字符串的列表,如
;['123-324-5832', '324-589-0983']
- 若调用在一个有分组的正则表达式上,则返回一个字符串的元组的列表(每个分组对应一个字符串),如
;[('123', '453', '4324'), ('343', '654', '3245)]
- 若调用在一个没有分组的正则表达式上,则返回一个匹配字符串的列表,如
-
:表示字符串必须以^xxx
开始;xxx
-
:表示字符串必须以xxx$
结尾;xxx
- 绝对路径:从根文件夹开始;
- 相对路径:相对于程序的当前工作目录;
- 读写文件的步骤:
- 调用
函数,返回一个open()
对象;File
- 调用
对象的File
或read()
方法;write()
- 调用
对象的File
方法,关闭该文件;close()
- 调用
- 永久删除文件和文件夹:
-
删除os.unlink(path)
处的文件;path
-
将删除os.rmdir(path)
处的文件夹,但文件夹必须为空;path
-
删除shutil.rmtree(path)
处的文件夹,包含的所有文件和文件夹都会被删除;path
-
调试
- 反向跟踪:Python遇到错误,就会产生错误信息,这些信息包含了出错信息、导致该错误的代码行号,以及导致该错误的函数调用的序列(调用栈);