天天看点

python3.x 学习笔记 2一、解析二、字符串三、正则表达式

一、解析

【备注】主要讲列表解析、字典解析和集合解析的概念。

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结尾