一、解析
【备注】主要讲列表解析、字典解析和集合解析的概念。
1、处理文件和目录
a:python3自带一个os模块(代表操作系统operating system),os模块包含非常多的函数用于获取(和修改)本地目录、文件进程、环境变量等信息。
b:os是python3自带的,可以在任何地方导入。import os
c:获取当前工作目录:os.getcwd();
d:改变当前工作目录:os.chdir();
2、处理文件名和目录名
a:os.path模块包含了处理文件名和目录名的函数
b:os.path.join()函数从一个或者多个路径片段中构造成一个路径名。其可以接受任何数量的参数。
print(os.path.join(os.path.expanduser('~'),'diveintopython3', 'examples', 'humansize.py'))
结果:c: \Users\pilgrim\diveintopython3\examples\humansize.py
c:os.path.split()分割一个完整的路径,并返回目录和文件名。
split()函数的返回值被赋给一个二元组,每个变量获得元组中对应元素的值。
例如:os.path.split(pathname)----》('/Usrs/p/d/examples', 'hum.py')
(dirname, filename) = os.path.split(pathname)
其中:dirname=‘/Usrs/p/d/examples' ; filename='hum.py'
d:os.path.splitext()用于分割文件名并返回文件名和其扩展名。
例如:(shortname, extension) = os.path.splitext(filename)
shortname=’hum‘; extension=’.py‘【包含前面的点】
3、罗列目录内容
a:glob模块;可以通过编程的方法获取一个目录的内容。
b:用法:import glob引入 glob.glob(参数)调用
4、获取文件元信息
a:文件的元信息:文件创建时间、修改时间、文件大小等信息
b:os.stat(’参数‘)函数返回一个或者多种文件的元信息的对象。参数接收文件名。
例如:metadata = os.stat('feed.xml')
metadata.st_mtime:其中st_mtime获取文件最后修改时间。
metadata.st_size :其中st_size获取文件的大小。
5、构造绝对路径
a:os.path.realpath()
6、列表解析
a:定义:通过对列表中每一个元素【elem】应用一个函数的方法来将一个列表映射到另一个列表。
例如:a_list = [elem * 2 for elem in a_list]
b:列表解析也可以过滤列表,生成比原列表短的列表。---如加入:if判断条件
例如:[f for f in glob.glob('*.py') ifos.stat(f).st_size>6000]
7、字典解析
a:字典解析和列表解析一样,只不过生成的是字典。
b:可以通过字典解析交换字典的键和值:
例如:>>> a_dict = {'a': 1, 'b': 2, 'c': 3}
>>> {value:key for key, value in a_dict.items()} //items()函数返回字典的所有键和值
{1: 'a', 2: 'b', 3: 'c'}
8、集合解析
二、字符串
1、字符串操作:
a:s.splitlines();对字符串按行进行分行输出,产生一个字符串列表; b:s.lower():将字符串变为小写;对应的有s.upper() c:s.count() :对指定的字符串进行计数 d:将一个有键值对形式的列表转换成字典
例如:>>>query = 'key1=value1&key2=value2'
>>> a_list = query.split('&') //【split()之后我们得到的是一个列表】 >>>a_list ['key1=value1', 'key2=value2'] >>> a_list_of_lists = [v.split('=', 1)for v in a_list] >>> a_list_of_lists [ ['key1','value1'], ['key2', 'value2'] ] >>> a_dict = dict(a_list_of_lists) //实现列表到字典的转换 {'key1 : value1', 'key2 : value2'}
2、字符串切片:
a:类似列表的切片,可以通过制定两个索引值来获得字符串的一个slice;如:>>> a_string[18:]
b:bytes对象和string对象相互转换方法:decode()-----bytes转换成字符串、encode() ----字符串转bytes
如:a_string = by.decode('ascii')
三、正则表达式
1、正则表达式的相关功能在re模块中
a:引入正则表达式:import re
b:re.sub( )函数可以做字符串的替换。^匹配字符串的开始;$匹配字符串的结束。
例如:
>>> s = '100 NORTH BROAD ROAD' //仅替换最后一个ROAD
>>> import re
>>> re.sub('ROAD$', 'RD.',s) //$表示以ROAD结束的词
c:在字符串前加一个字符‘r’---表示字符串中没有任何字符需要转义。
d:‘\b’ 用此包含的字符,表示他必须是一个独立的词;不管在字符串的什么位置
例如:
>>> s = '100 BROAD ROAD APT. 3' //【我们仅希望替换独立单词ROAD】
>>> re.sub(r'\bROAD\b', 'RD.', s) //r开头表示字符串没有转义,\b包围字符--表示此字符必须为单独的一个词
'100 BROAD RD. APT 3' //结果
e:re模块的基本方法时search()函数。它使用正则表达式来匹配字符串( M)。如果成功匹配, search()返回一个匹配对象。如果没有匹配到,search()就返回None.。
例如:
>>>import re
>>>pattern='^M?M?M?$'
>>>re.search(pattern, 'MM')
f:使用语法{n, m}
例如:
>>>pattern = '^M{0,3}$'
表示匹配字符串开始,然后是任意的0到3个M字符。
2、松散正则表达式
a:其需要传递一个re.VERBOSE参数。表示用的是松散正则表达式
b:\d表示任意的数字(0-9);\D表示除数字外的所有字符;\d+;其中+表示一个或者多个;\d*:其中*表示又或者没有
如:(\d{3})--放到圆括号里表示一定要匹配3个数字。
(\d+):表示一个或者多个数字;其中+表示一个或者多个
3、常用正则表达式的字符含义
a:^ 匹配字符串开始位置
b:$ 匹配字符串结束位置
c:\b 匹配一个单词边界;结束和开始
d:\d 匹配一个数字
e:\D 匹配一个任意的非数字字符
f:x? 匹配可选的 x 字符。换句话说,就是 0 个或者 1 个 x 字符。 【?可以认为是x的个数】
g:x* 匹配 0 个或更多的 x。
h:x+ 匹配 1 个或者更多 x。【至少一个】
i:x{n,m} 匹配 n 到 m 个 x,至少 n 个,不能超过 m 个
k:(a|b|c) 匹配单独的任意一个 a 或者 b 或者 c。
l:(x) 这是一个组【括号括起来,表示一个组】,它会记忆它匹配到的字符串。你可以用re.search 返回的匹配对象的 groups()函数来获取到匹配的值
k:中括号[ ]表示匹配这些字符串之一,且只能匹配其中一个。
例如:re.search('[sxz]$', noun) 表示noun是否以s、x或者z结尾