Skip to content

Commit 65b3860

Browse files
committed
标准库部分:为文中出现的代码、变量、命令等添加代码(code)格式。
1 parent 852a71d commit 65b3860

File tree

13 files changed

+261
-254
lines changed

13 files changed

+261
-254
lines changed

content/STL01.md

Lines changed: 40 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -16,23 +16,23 @@
1616

1717
(官方documentation)
1818

19-
在Python中使用正则表达式需要标准库中的一个包re
19+
在Python中使用正则表达式需要标准库中的一个包`re`
2020
```python
2121
import re
2222
m = re.search('[0-9]','abcd4ef')
2323
print(m.group(0))
2424
```
25-
re.search()接收两个参数,第一个'[0-9]'就是我们所说的正则表达式,它告诉Python的是,“听着,我从字符串想要找的是从0到9的一个数字字符”。
25+
`re.search()`接收两个参数,第一个`'[0-9]'`就是我们所说的正则表达式,它告诉Python的是,“听着,我从字符串想要找的是从`0``9`的一个数字字符”。
2626

27-
re.search()如果从第二个参数找到符合要求的子字符串,就返回一个对象m,你可以通过m.group()的方法查看搜索到的结果。如果没有找到符合要求的字符,re.search()会返回None
27+
`re.search()`如果从第二个参数找到符合要求的子字符串,就返回一个对象`m`,你可以通过`m.group()`的方法查看搜索到的结果。如果没有找到符合要求的字符,`re.search()`会返回`None`
2828

2929

3030

3131
如果你熟悉Linux或者Perl, 你应该已经熟悉正则表达式。当我们打开Linux shell的时候,可以用正则表达式去查找或着删除我们想要的文件,比如说:
3232
```bash
3333
$rm book[0-9][0-9].txt
3434
```
35-
这就是要删除类似于book02.txt的文件。book[0-9][0-9].txt所包含的信息是,以book开头,后面跟两个数字字符,之后跟有".txt"的文件名。如果不符合条件的文件名,比如说:
35+
这就是要删除类似于`book02.txt`的文件。`book[0-9][0-9].txt`所包含的信息是,以`book`开头,后面跟两个数字字符,之后跟有`.txt`的文件名。如果不符合条件的文件名,比如说:
3636

3737
bo12.txt
3838

@@ -51,10 +51,10 @@ Perl中内建有正则表达式的功能,据说是所有正则表达式系统
5151
m = re.search(pattern, string) # 搜索整个字符串,直到发现符合的子字符串。
5252
m = re.match(pattern, string) # 从头开始检查字符串是否符合正则表达式。必须从字符串的第一个字符开始就相符。
5353
```
54-
可以从这两个函数中选择一个进行搜索。上面的例子中,我们如果使用re.match()的话,则会得到None,因为字符串的起始为‘a’, 不符合'[0-9]'的要求。
54+
可以从这两个函数中选择一个进行搜索。上面的例子中,我们如果使用`re.match()`的话,则会得到`None`,因为字符串的起始为`'a'`, 不符合`'[0-9]'`的要求。
5555

5656

57-
对于返回的m, 我们使用m.group()来调用结果。(我们会在后面更详细解释m.group())
57+
对于返回的`m`, 我们使用`m.group()`来调用结果。(我们会在后面更详细解释`m.group()`
5858

5959

6060

@@ -71,7 +71,7 @@ re.findall() # 根据正则表达式搜索字符串,将所有符合的子字
7171

7272

7373

74-
(在熟悉了上面的函数后,可以看一下re.compile(),以便于提高搜索效率。)
74+
(在熟悉了上面的函数后,可以看一下`re.compile()`,以便于提高搜索效率。)
7575

7676

7777

@@ -81,113 +81,113 @@ re.findall() # 根据正则表达式搜索字符串,将所有符合的子字
8181

8282
1)单个字符:
8383

84-
. 任意的一个字符
84+
`.` 任意的一个字符
8585

86-
a|b 字符a或字符b
86+
`a|b` 字符a或字符b
8787

88-
[afg] a或者f或者g的一个字符
88+
`[afg]` a或者f或者g的一个字符
8989

90-
[0-4] 0-4范围内的一个字符
90+
`[0-4]` 0-4范围内的一个字符
9191

92-
[a-f] a-f范围内的一个字符
92+
`[a-f]` a-f范围内的一个字符
9393

94-
[^m] 不是m的一个字符
94+
`[^m]` 不是m的一个字符
9595

96-
\s 一个空格
96+
`\s` 一个空格
9797

98-
\S 一个非空格
98+
`\S` 一个非空格
9999

100-
\d [0-9]
100+
`\d` `[0-9]`
101101

102-
\D [^0-9]
102+
`\D` `[^0-9]`
103103

104-
\w [0-9a-zA-Z]
104+
`\w` `[0-9a-zA-Z]`
105105

106-
\W [^0-9a-zA-Z]
106+
`\W` `[^0-9a-zA-Z]`
107107

108108

109109

110110
2)重复
111111

112112
紧跟在单个字符之后,表示多个这样类似的字符
113113

114-
* 重复 >=0 次
114+
`*` 重复 >=0 次
115115

116-
+ 重复 >=1 次
116+
`+` 重复 >=1 次
117117

118-
? 重复 0或者1 次
118+
`?` 重复 0或者1 次
119119

120-
{m} 重复m次。比如说 a{4}相当于aaaa,再比如说[1-3]{2}相当于[1-3][1-3]
120+
`{m}` 重复m次。比如说 a{4}相当于aaaa,再比如说`[1-3]{2}`相当于`[1-3][1-3]`
121121

122-
{m, n} 重复m到n次。比如说a{2, 5}表示a重复2到5次。小于m次的重复,或者大于n次的重复都不符合条件。
122+
`{m, n}` 重复m到n次。比如说`a{2, 5}`表示a重复2到5次。小于m次的重复,或者大于n次的重复都不符合条件。
123123

124124

125125

126126
正则表达 相符的字符串举例
127127

128-
[0-9]{3,5} 9678
128+
`[0-9]{3,5}` 9678
129129

130-
a?b b
130+
`a?b` b
131131

132-
a+b aaaaab
132+
`a+b` aaaaab
133133

134134

135135

136136
3) 位置
137137

138-
^ 字符串的起始位置
138+
`^` 字符串的起始位置
139139

140-
$ 字符串的结尾位置
140+
`$` 字符串的结尾位置
141141

142142

143143

144144
正则表达 相符的字符串举例 不相符字符串
145145

146-
^ab.*c$ abeec cabeec (如果用re.search(), 将无法找到。)
146+
`^ab.*c$` abeec cabeec (如果用`re.search()`, 将无法找到。)
147147

148148

149149
4)返回控制
150150

151151
我们有可能对搜索的结果进行进一步精简信息。比如下面一个正则表达式:
152152

153-
output_(\d{4})
153+
`output_(\d{4})`
154154

155-
该正则表达式用括号()包围了一个小的正则表达式,\d{4}。 这个小的正则表达式被用于从结果中筛选想要的信息(在这里是四位数字)。这样被括号圈起来的正则表达式的一部分,称为群(group)。
156-
我们可以m.group(number)的方法来查询群。group(0)是整个正则表达的搜索结果,group(1)是第一个群……
155+
该正则表达式用括号`()`包围了一个小的正则表达式,`\d{4}`。 这个小的正则表达式被用于从结果中筛选想要的信息(在这里是四位数字)。这样被括号圈起来的正则表达式的一部分,称为群(group)。
156+
我们可以`m.group(number)`的方法来查询群。`group(0)`是整个正则表达的搜索结果,`group(1)`是第一个群……
157157
```python
158158
import re
159159
m = re.search("output_(\d{4})", "output_1986.txt")
160160
print(m.group(1))
161161
```
162162

163-
我们还可以将群命名,以便更好地使用m.group查询:
163+
我们还可以将群命名,以便更好地使用`m.group`查询:
164164
```python
165165
import re
166166
m = re.search("output_(?P<year>\d{4})", "output_1986.txt") #(?P<name>...) 为group命名
167167
print(m.group("year"))
168168
```
169169

170-
对比re.search和re.match
171-
本节开头我们用re.search实现数字子串的提取
170+
对比`re.search``re.match`
171+
本节开头我们用`re.search`实现数字子串的提取
172172
m = re.search('[0-9]','abcd4ef')
173-
使用re.match同样实现上述功能(提取数字子串),我们需要用到小括号'()':
173+
使用`re.match`同样实现上述功能(提取数字子串),我们需要用到小括号`'()'`:
174174
```python
175175
m = re.match('.*([0-9]+).*','abcd4ef')
176176
# 注意,我们通过m.group(1)来获取数字字串,下标0处是匹配的整个字符串
177177
print m.group(0), m.group(1)
178178
abcd4ef 4
179179
```
180-
很明显,这里使用match方法要繁琐一些;体会两个方法的差异,搜索整个字符串中的子串使用re.search,而从头开始检查字符串是否符合正则表达式选用re.match;
180+
很明显,这里使用`match`方法要繁琐一些;体会两个方法的差异,搜索整个字符串中的子串使用`re.search`,而从头开始检查字符串是否符合正则表达式选用`re.match`;
181181

182182
练习
183-
有一个文件,文件名为output_1981.10.21.txt 。下面使用Python: 读取文件名中的日期时间信息,并找出这一天是周几。将文件改名为output_YYYY-MM-DD-W.txt (YYYY:四位的年,MM:两位的月份,DD:两位的日,W:一位的周几,并假设周一为一周第一天)
183+
有一个文件,文件名为`output_1981.10.21.txt`。下面使用Python: 读取文件名中的日期时间信息,并找出这一天是周几。将文件改名为`output_YYYY-MM-DD-W.txt`(`YYYY`:四位的年,`MM`:两位的月份,`DD`:两位的日,`W`:一位的周几,并假设周一为一周第一天)
184184

185185

186186

187187

188188

189189
##总结
190190

191-
re.search() re.match() re.sub() re.findall()
191+
`re.search()` `re.match()` `re.sub()` `re.findall()`
192192

193193
正则表达式构成方法

content/STL02.md

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,14 @@ Python具有良好的时间和日期管理功能。实际上,计算机只会
88

99
##time包
1010

11-
time包基于C语言的库函数(library functions)。Python的解释器通常是用C编写的,Python的一些函数也会直接调用C语言的库函数。
11+
`time`包基于C语言的库函数(library functions)。Python的解释器通常是用C编写的,Python的一些函数也会直接调用C语言的库函数。
1212
```python
1313
import time
1414
print(time.time()) # wall clock time, unit: second
1515
print(time.clock()) # processor clock time, unit: second
1616
```
1717

18-
time.sleep()可以将程序置于休眠状态,直到某时间间隔之后再唤醒程序,让程序继续运行。
18+
`time.sleep()`可以将程序置于休眠状态,直到某时间间隔之后再唤醒程序,让程序继续运行。
1919
```python
2020
import time
2121
print('start')
@@ -26,7 +26,7 @@ print('wake up')
2626

2727

2828

29-
time包还定义了struct_time对象。该对象实际上是将挂钟时间转换为年、月、日、时、分、秒……等日期信息,存储在该对象的各个属性中(tm_year, tm_mon, tm_mday...)。下面方法可以将挂钟时间转换为struct_time对象:
29+
`time`包还定义了`struct_time`对象。该对象实际上是将挂钟时间转换为年、月、日、时、分、秒……等日期信息,存储在该对象的各个属性中(`tm_year`, `tm_mon`, `tm_mday`...)。下面方法可以将挂钟时间转换为`struct_time`对象:
3030
```python
3131
st = time.gmtime() # 返回struct_time格式的UTC时间
3232
st = time.localtime() # 返回struct_time格式的当地时间, 当地时区根据系统环境决定。
@@ -38,27 +38,27 @@ s = time.mktime(st) # 将struct_time格式转换成wall clock time
3838

3939
1) 简介
4040

41-
datetime包是基于time包的一个高级包, 为我们提供了多一层的便利。
41+
`datetime`包是基于`time`包的一个高级包, 为我们提供了多一层的便利。
4242

43-
datetime可以理解为date和time两个组成部分。date是指年月日构成的日期(相当于日历),time是指时分秒微秒构成的一天24小时中的具体时间(相当于手表)。你可以将这两个分开管理(datetime.date类,datetime.time类),也可以将两者合在一起(datetime.datetime类)。由于其构造大同小异,我们将只介绍datetime.datetime类
43+
`datetime`可以理解为date和time两个组成部分。date是指年月日构成的日期(相当于日历),time是指时分秒微秒构成的一天24小时中的具体时间(相当于手表)。你可以将这两个分开管理(`datetime.date`类,`datetime.time`),也可以将两者合在一起(`datetime.datetime`)。由于其构造大同小异,我们将只介绍`datetime.datetime`
4444

4545
比如说我现在看到的时间,是2012年9月3日21时30分,我们可以用如下方式表达:
4646
```python
4747
import datetime
4848
t = datetime.datetime(2012,9,3,21,30)
4949
print(t)
5050
```
51-
所返回的t有如下属性:
51+
所返回的`t`有如下属性:
5252

53-
hour, minute, second, microsecond
53+
`hour`, `minute`, `second`, `microsecond`
5454

55-
year, month, day, weekday # weekday表示周几
55+
`year`, `month`, `day`, `weekday` # weekday表示周几
5656

5757

5858

5959
2) 运算
6060

61-
datetime包还定义了时间间隔对象(timedelta)。一个时间点(datetime)加上一个时间间隔(timedelta)可以得到一个新的时间点(datetime)。比如今天的上午3点加上5个小时得到今天的上午8点。同理,两个时间点相减会得到一个时间间隔。
61+
`datetime`包还定义了时间间隔对象(`timedelta`)。一个时间点(`datetime`)加上一个时间间隔(`timedelta`)可以得到一个新的时间点(`datetime`)。比如今天的上午3点加上5个小时得到今天的上午8点。同理,两个时间点相减会得到一个时间间隔。
6262

6363
```python
6464
import datetime
@@ -70,45 +70,46 @@ print(t + delta1)
7070
print(t + delta2)
7171
print(t_next - t)
7272
```
73-
在给datetime.timedelta传递参数(如上的seconds和weeks)的时候,还可以是days, hours, milliseconds, microseconds。
73+
在给`datetime.timedelta`传递参数(如上的`seconds``weeks`)的时候,还可以是`days`, `hours`, `milliseconds`, `microseconds`
7474

7575

7676

77-
两个datetime对象还可以进行比较。比如使用上面的t和t_next:
77+
两个`datetime`对象还可以进行比较。比如使用上面的`t``t_next`:
7878
```python
7979
print(t > t_next)
8080
```
8181

8282
3) datetime对象与字符串转换
8383

84-
假如我们有一个的字符串,我们如何将它转换成为datetime对象呢
84+
假如我们有一个的字符串,我们如何将它转换成为`datetime`对象呢
8585

8686
一个方法是用上一讲的正则表达式来搜索字符串。但时间信息实际上有很明显的特征,我们可以用格式化读取的方式读取时间信息。
8787
```python
8888
from datetime import datetime
8989
format = "output-%Y-%m-%d-%H%M%S.txt"
9090
str = "output-1997-12-23-030000.txt"
9191
t = datetime.strptime(str, format)
92-
strptime, p = parsing
9392
```
93+
`strptime`中的“p”代表解析(parsing)。
9494

95-
我们通过format来告知Python我们的str字符串中包含的日期的格式。在format中,%Y表示年所出现的位置, %m表示月份所出现的位置……。
9695

97-
反过来,我们也可以调用datetime对象的strftime()方法,来将datetime对象转换为特定格式的字符串。比如上面所定义的t_next,
96+
我们通过`format`来告知Python我们的str字符串中包含的日期的格式。在`format`中,`%Y`表示年所出现的位置, `%m`表示月份所出现的位置……。
97+
98+
反过来,我们也可以调用`datetime`对象的`strftime()`方法,来将`datetime`对象转换为特定格式的字符串。比如上面所定义的`t_next`,
9899
```python
99100
print(t_next.strftime(format))
100101
```
101-
strftime, f = formatting
102+
`strftime`中的“f”代表格式化(formatting)。
102103

103-
具体的格式写法可参阅官方文档。 如果是Linux系统,也可查阅date命令的手册($man date),两者相通。
104+
具体的格式写法可参阅官方文档。 如果是Linux系统,也可查阅`date`命令的手册(`$man date`),两者相通。
104105

105106

106107

107108
##总结
108109

109110
时间,休眠
110111

111-
datetime, timedelta
112+
`datetime`, `timedelta`
112113

113114
格式化时间
114115

content/STL03.md

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
##os.path包
1212

13-
os.path包主要是处理路径字符串,比如说'/home/vamei/doc/file.txt',提取出有用信息。
13+
`os.path`包主要是处理路径字符串,比如说`'/home/vamei/doc/file.txt'`,提取出有用信息。
1414

1515
```python
1616
import os.path
@@ -31,7 +31,7 @@ os.path.normpath(path) # 去除路径path中的冗余。比如'/home/vamei/../
3131

3232

3333

34-
os.path还可以查询文件的相关信息(metadata)。文件的相关信息不存储在文件内部,而是由操作系统维护的,关于文件的一些信息(比如文件类型,大小,修改时间)。
34+
`os.path`还可以查询文件的相关信息(metadata)。文件的相关信息不存储在文件内部,而是由操作系统维护的,关于文件的一些信息(比如文件类型,大小,修改时间)。
3535

3636
```python
3737
import os.path
@@ -46,15 +46,15 @@ print(os.path.getmtime(path)) # 查询文件上一次修改的时间
4646
print(os.path.isfile(path)) # 路径是否指向常规文件
4747
print(os.path.isdir(path)) # 路径是否指向目录文件
4848
```
49-
(实际上,这一部份类似于Linux中的ls命令的某些功能)
49+
(实际上,这一部份类似于Linux中的`ls`命令的某些功能)
5050

5151

5252

5353
##glob包
5454

55-
glob包最常用的方法只有一个, glob.glob()。该方法的功能与Linux中的ls相似(参看Linux文件管理命令),接受一个Linux式的文件名格式表达式(filename pattern expression),列出所有符合该表达式的文件(与正则表达式类似),将所有文件名放在一个表中返回。所以glob.glob()是一个查询目录下文件的好方法。
55+
`glob`包最常用的方法只有一个, `glob.glob()`。该方法的功能与Linux中的`ls`相似(参看Linux文件管理命令),接受一个Linux式的文件名格式表达式(filename pattern expression),列出所有符合该表达式的文件(与正则表达式类似),将所有文件名放在一个表中返回。所以`glob.glob()`是一个查询目录下文件的好方法。
5656

57-
该文件名表达式的语法与Python自身的正则表达式不同 (你可以同时看一下fnmatch包,它的功能是检测一个文件名是否符合Linux的文件名格式表达式)。 如下:
57+
该文件名表达式的语法与Python自身的正则表达式不同 (你可以同时看一下`fnmatch`,它的功能是检测一个文件名是否符合Linux的文件名格式表达式)。 如下:
5858

5959
Filename Pattern Expression Python Regular Expression
6060

@@ -70,7 +70,7 @@ Filename Pattern Expression Python Regular Expression
7070

7171

7272

73-
我们可以用该命令找出/home/vamei下的所有文件:
73+
我们可以用该命令找出`/home/vamei`下的所有文件:
7474
```python
7575
import glob
7676
print(glob.glob('/home/vamei/*'))
@@ -80,6 +80,6 @@ print(glob.glob('/home/vamei/*'))
8080

8181
文件系统
8282

83-
os.path
83+
`os.path`
8484

85-
glob.glob
85+
`glob.glob`

0 commit comments

Comments
 (0)