File
open() 方法
Python open()
方法用于打开一个文件,并返回文件对象,在对文件进行处理过程都需要使用到这个函数,如果该文件无法被打开,会抛出 OSError。
注意:使用 open()
方法一定要保证关闭文件对象,即调用 close()
方法。
open()
函数常用形式是接收两个参数:文件名(file)和模式(mode)。
1 | 'r') open(file, mode= |
完整的语法格式为:1
'r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None) open(file, mode=
参数说明:
- file:必需,文件路径(相对或者绝对路径)。
- mode:可选,文件打开模式
- buffering:设置缓冲
- encoding:一般使用utf8
- errors:报错级别
- newline:区分换行符
- closefd:传入的file参数类型
- opener:
mode 参数有:
模式 | 描述 |
---|---|
t | 文本模式 (默认)。默认为文本模式 |
x | 写模式,新建一个文件,如果该文件已存在则会报错。 |
b | 二进制模式。 |
+ | 打开一个文件进行更新(可读可写)。 |
U | 通用换行模式(不推荐)。 |
r | 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 |
rb | 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。一般用于非文本文件如图片等。 |
r+ | 打开一个文件用于读写。文件指针将会放在文件的开头。 |
rb+ | 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。一般用于非文本文件如图片等。 |
w | 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
wb | 以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。 |
w+ | 打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
wb+ | 以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。 |
a | 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
ab | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
a+ | 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 |
ab+ | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。 |
文件对象的操作方法
file 对象使用 open
函数来创建,下表列出了 file 对象常用的函数:
方法 | 描述 |
---|---|
file.close() | 关闭文件。关闭后文件不能再进行读写操作。 |
file.flush() | 刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件, 而不是被动的等待输出缓冲区写入。 |
file.next() | 返回文件下一行。 |
file.read([size]) | 从文件读取指定的字节数,如果未给定或为负则读取所有。 |
file.readline([size]) | 读取整行,包括 “\n” 字符。 |
file.readlines([sizeint]) | 读取所有行并返回列表,若给定sizeint>0,返回总和大约为sizeint字节的行, 实际读取值可能比 sizeint 较大, 因为需要填充缓冲区。 |
file.tell() | 返回文件当前位置。 |
file.write(str) | 将字符串写入文件,返回的是写入的字符长度。 |
file.writelines(sequence) | 向文件写入一个序列字符串列表,如果需要换行则要自己加入每行的换行符。 |
OS模块
os 模块提供了非常丰富的方法用来处理文件和目录。常用的方法如下表所示:
方法 | 描述 |
---|---|
os.chdir(path) | 改变当前工作目录 |
os.getcwd() | 返回当前工作目录 |
os.getcwdu() | 返回一个当前工作目录的Unicode对象 |
os.listdir(path) | 返回path指定的文件夹包含的文件或文件夹的名字的列表。 |
os.makedirs(path[, mode]) | 递归文件夹创建函数。像mkdir(), 但创建的所有intermediate-level文件夹需要包含子文件夹。 |
os.mkdir(path[, mode]) | 以数字mode的mode创建一个名为path的文件夹.默认的 mode 是 0777 (八进制)。 |
os.readlink(path) | 返回软链接所指向的文件 |
os.remove(path) | 删除路径为path的文件。如果path是一个文件夹,将抛出OSError; 查看下面的rmdir()删除一个 directory。 |
os.removedirs(path) | 递归删除目录。 |
os.rename(src, dst) | 重命名文件或目录,从 src 到 dst |
os.renames(old, new) | 递归地对目录进行更名,也可以对文件进行更名。 |
os.rmdir(path) | 删除path指定的空目录,如果目录非空,则抛出一个OSError异常。 |
os.stat(path) | 获取path指定的路径的信息,功能等同于C API中的stat()系统调用。 |
os.unlink(path) | 删除文件路径 |
os.path 模块 | 获取文件的属性信息。 |
datetime模块
datetime是Python处理日期和时间的标准库。
获取当前日期和时间
1 | from datetime import datetime |
注意到datetime
是模块,datetime
模块还包含一个datetime
类,通过from datetime import datetime
导入的才是datetime
这个类。
如果仅导入import datetime
,则必须引用全名datetime.datetime
。
datetime.now()
返回当前日期和时间,其类型是datetime
。
获取指定日期和时间
要指定某个日期和时间,直接用参数构造一个datetime
:1
2
3from datetime import datetime
2018,8,8,8,8)) print(datetime(
2018-08-08 08:08:00
datetime转换为timestamp
在计算机中,时间实际上是用数字表示的。我们把1970年1月1日 00:00:00 UTC+00:00时区的时刻称为epoch time,记为0(1970年以前的时间timestamp为负数),当前时间就是相对于epoch time的秒数,称为timestamp。
把一个datetime
类型转换为timestamp
只需要简单调用timestamp()
方法:1
2
3
4from datetime import datetime
2018,8,8,8,8) dt = datetime(
dt.timestamp()
1533686880.0
注意Python的timestamp是一个浮点数。如果有小数位,小数位表示毫秒数。
timestamp转换为datetime
要把timestamp
转换为datetime
,使用datetime
提供的fromtimestamp()
方法:1
2
3
4from datetime import datetime
1533686880.0 t =
print(datetime.fromtimestamp(t))
2018-08-08 08:08:00
注意到timestamp是一个浮点数,它没有时区的概念,而datetime是有时区的。上述转换是在timestamp和本地时间做转换。
timestamp也可以直接被转换到UTC标准时区的时间:1
2
3
4
5
6from datetime import datetime
1533686880.0 t =
# 本地时间 print(datetime.fromtimestamp(t))
2018-08-08 08:08:00
# UTC时间 print(datetime.utcfromtimestamp(t))
2018-08-08 00:08:00
str转换为datetime
很多时候,用户输入的日期和时间是字符串,要处理日期和时间,首先必须把str转换为datetime。转换方法是通过datetime.strptime()实现,需要一个日期和时间的格式化字符串:1
2
3
4from datetime import datetime
'2018-8-8 08:08:00','%Y-%m-%d %H:%M:%S') day = datetime.strptime(
print(day)
2018-08-08 08:08:00
字符串'%Y-%m-%d %H:%M:%S'
规定了日期和时间部分的格式。注意转换后的datetime是没有时区信息的。
datetime转换为str
如果已经有了datetime对象,要把它格式化为字符串显示给用户,就需要转换为str,转换方法是通过strftime()实现的,同样需要一个日期和时间的格式化字符串:1
2
3from datetime import datetime
'%a, %b %d %H:%M')) print(datetime.now().strftime(
Mon, Apr 08 21:23
datetime
表示的时间需要时区信息才能确定一个特定的时间,否则只能视为本地时间。
如果要存储datetime
,最佳方法是将其转换为timestamp
再存储,因为timestamp
的值与时区完全无关。
类和对象
类定义
语法格式如下:1
2
3
4
5
6class ClassName:
<statement-1>
.
.
.
<statement-N>
类实例化后,可以使用其属性,实际上,创建一个类之后,可以通过类名访问其属性。
类对象
类对象支持两种操作:属性引用和实例化。
属性引用使用和 Python 中所有的属性引用一样的标准语法:obj.name
。
类有一个名为 __init__()
的特殊方法(构造方法),该方法在类实例化时会自动调用,像下面这样:1
2def __init__(self):
self.data = []
类定义了 __init__()
方法,类的实例化操作会自动调用 __init__()
方法。
__init__()
方法可以有参数,参数通过__init__()
传递到类的实例化操作上。
1 | class Complex: |
self代表类的实例,而非类。
正则表达式
模式字符串使用特殊的语法来表示一个正则表达式:
字母和数字表示他们自身。一个正则表达式模式中的字母和数字匹配同样的字符串。
多数字母和数字前加一个反斜杠时会拥有不同的含义。
标点符号只有被转义时才匹配自身,否则它们表示特殊的含义。
反斜杠本身需要使用反斜杠转义。
由于正则表达式通常都包含反斜杠,所以你最好使用原始字符串来表示它们。模式元素(如 r'\t'
,等价于 \\t
)匹配相应的特殊字符。
下表列出了正则表达式模式语法中的特殊元素。如果你使用模式的同时提供了可选的标志参数,某些模式元素的含义会改变。
模式 | 描述 | |
---|---|---|
^ | 匹配字符串的开头 | |
$ | 匹配字符串的末尾。 | |
. | 匹配任意字符,除了换行符,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符。 | |
[…] | 用来表示一组字符,单独列出:[amk] 匹配 ‘a’,’m’或’k’ | |
... | 不在[]中的字符:abc 匹配除了a,b,c之外的字符。 | |
re* | 匹配0个或多个的表达式。 | |
re+ | 匹配1个或多个的表达式。 | |
re? | 匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式 | |
re{ n,} | 精确匹配n个前面表达式。例如,”o{2,}”不能匹配”Bob”中的”o”,但能匹配”foooood”中的所有o。”o{1,}”等价于”o+”。”o{0,}”则等价于”o*”。 | |
re{ n, m} | 匹配 n 到 m 次由前面的正则表达式定义的片段,贪婪方式 | |
a \ | b | 匹配a或b |
(re) | 匹配括号内的表达式,也表示一个组 | |
(?imx) | 正则表达式包含三种可选标志:i, m, 或 x 。只影响括号中的区域。 | |
(?-imx) | 正则表达式关闭 i, m, 或 x 可选标志。只影响括号中的区域。 | |
(?: re) | 类似 (…), 但是不表示一个组 | |
(?imx: re) | 在括号中使用i, m, 或 x 可选标志 | |
(?-imx: re) | 在括号中不使用i, m, 或 x 可选标志 | |
(?#…) | 注释. | |
(?= re) | 前向肯定界定符。如果所含正则表达式,以 … 表示,在当前位置成功匹配时成功,否则失败。但一旦所含表达式已经尝试,匹配引擎根本没有提高;模式的剩余部分还要尝试界定符的右边。 | |
(?! re) | 前向否定界定符。与肯定界定符相反;当所含表达式不能在字符串当前位置匹配时成功。 | |
(?> re) | 匹配的独立模式,省去回溯。 | |
\w | 匹配数字字母下划线 | |
\W | 匹配非数字字母下划线 | |
\s | 匹配任意空白字符,等价于 [\t\n\r\f]。 | |
\S | 匹配任意非空字符 | |
\d | 匹配任意数字,等价于 [0-9]。 | |
\D | 匹配任意非数字 | |
\Z | 匹配字符串结束,如果是存在换行,只匹配到换行前的结束字符串。 | |
\z | 匹配字符串结束 | |
\G | 匹配最后匹配完成的位置。 | |
\b | 匹配一个单词边界,也就是指单词和空格间的位置。例如, ‘er\b’ 可以匹配”never” 中的 ‘er’,但不能匹配 “verb” 中的 ‘er’。 | |
\B | 匹配非单词边界。’er\B’ 能匹配 “verb” 中的 ‘er’,但不能匹配 “never” 中的 ‘er’。 | |
\n, \t, 等。 | 匹配一个换行符。匹配一个制表符, 等 | |
\1…\9 | 匹配第n个分组的内容。 | |
\10 | 匹配第n个分组的内容,如果它经匹配。否则指的是八进制字符码的表达式 |
re模块
正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。
re 模块使 Python 语言拥有全部的正则表达式功能。
re.match函数
re.match
尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()
就返回none
。
1 | 0) re.match(pattern, string, flags= |
参数说明:
- pattern:匹配的正则表达式
- string:要匹配的字符串。
- flags:标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。
匹配成功re.match
方法返回一个匹配的对象,否则返回None
。
re.search方法
re.search
扫描整个字符串并返回第一个成功的匹配。1
0) re.search(pattern, string, flags=
参数说明:
- pattern:匹配的正则表达式
- string:要匹配的字符串。
- flags:标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。
匹配成功re.search
方法返回一个匹配的对象,否则返回None
。
检索和替换
Python 的re模块提供了re.sub
用于替换字符串中的匹配项。1
0) re.sub(pattern, repl, string, count=
参数说明:
- pattern:正则中的模式字符串。
- repl:替换的字符串,也可为一个函数。
- string:要被查找替换的原始字符串。
- count:模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。
1 | import re |
repl 参数可以是一个函数
compile 函数
compile 函数用于编译正则表达式,生成一个正则表达式( Pattern )对象,供 match() 和 search() 这两个函数使用。1
re.compile(pattern[, flags])
参数:
- pattern:一个字符串形式的正则表达式
- flags:可选,表示匹配模式,比如忽略大小写,多行模式等,具体参数为:
- re.I:忽略大小写
- re.L:表示特殊字符集 \w, \W, \b, \B, \s, \S 依赖于当前环境
- re.M:多行模式
- re.S:即为’ . ‘并且包括换行符在内的任意字符(’ . ‘不包括换行符)
- re.U:表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依赖于 Unicode 字符属性数据库
- re.X:为了增加可读性,忽略空格和’ # ‘后面的注释
findall
在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。
注意: match 和 search 是匹配一次,findall 匹配所有。1
findall(string[, pos[, endpos]])
参数:
- string:待匹配的字符串。
- pos:可选参数,指定字符串的起始位置,默认为 0。
- endpos:可选参数,指定字符串的结束位置,默认为字符串的长度。
re.finditer
和 findall
类似,在字符串中找到正则表达式所匹配的所有子串,并把它们作为一个迭代器返回。1
0) re.finditer(pattern, string, flags=
参数:
- pattern:匹配的正则表达式
- string:要匹配的字符串。
- flags:标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。
re.split
split
方法按照能够匹配的子串将字符串分割后返回列表,它的使用形式如下:1
0, flags=0]) re.split(pattern, string[, maxsplit=
参数:
- pattern:匹配的正则表达式
- string:要匹配的字符串。
- maxsplit:分隔次数,maxsplit=1 分隔一次,默认为 0,不限制次数。
- flags:标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。
http请求
python 3.x 以上版本揽括了 urllib2,把urllib2 和 urllib 整合到一起。
Python实现HTTP请求有以下两种方式:
urllib
1 | import urllib |
Requests
1 | #get请求 |