模块

当我们用一种语言开始真正的软件开发室,除了编写代码外,还需要很多基本的已经写好的现成的东西,高级语言通常都会为我们提供了一个比较完善的基础代码库,让我们能直接调用,python也不例外,为我们提供了分成完善的基础代码和第三方库。在python中一个.py文件就是一个模块。

模块导入使用import

Python模块、字符编码、文件读写
获取随机数模块

Python模块、字符编码、文件读写
调用系统命令

Python模块、字符编码、文件读写
把执行脚本时传递的参数获取到了

当我们试图加载一个模块时,Python会在指定的路径下搜索对应的.py文件,如果找不到,就会报错,默认情况下,Python解释器会搜索当前目录、所有已安装的内置模块和第三方模块,搜索路径存放在sys模块的path变量中
Python模块、字符编码、文件读写
sys.path

在Python中,安装第三方模块,是通过包管理工具pip完成的
Python模块、字符编码、文件读写
安装第三方库

字符串编码

因为计算机只能处理二进制数字,如果要处理文本,就必须先把文本转换为二进制数字才能处理。

由于计算机是美国人发明的,因此,最早只有127个字符被编码到计算机里,也就是大小写英文字母、数字和一些符号,这个编码表被称为ASCII编码

计算机漂洋过海来到中国后,问题来了,计算机不认识中文,当然也没法显示中文,但是要处理中文显然一个字节是不够的,至少需要两个字节,而且还不能和ASCII编码冲突,所以,中国制定了GB2312编码,用来把中文编进去,但是汉字太多了,GB2312也不够用,经过扩展之后的编码称为GBK标准。

全世界有上百种语言,各国有各国的标准,就会不可避免地出现冲突,结果就是,在多语言混合的文本中,显示出来会有乱码。因此,Unicode应运而生。Unicode把所有语言都统一到一套编码里,这样就不会再有乱码问题了。现代操作系统和大多数编程语言都直接支持Unicode。

但是Unicode是用两个字节来表示一个字符,而ASCII编码是1个字节,新的问题又出现了:如果统一成Unicode编码,乱码问题从此消失了。但是,如果你写的文本基本上全部是英文的话,用Unicode编码比ASCII编码需要多一倍的存储空间,在存储和传输上就十分不划算。基于此,美利坚的科学家们提出来UTF-8,UTF-8编码把一个Unicode字符根据不同的数字大小编码成1-6个字节,常用的英文字母被编码成1个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节。如果你要传输的文本包含大量英文字符,用UTF-8编码就能节省空间。另外,ASCII编码其实可以看成是UTF-8编码的一部分。

在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8、GBK等编码。

我们的文本编辑器软件都有默认的保存文件的编码方式,比如utf8,比如gbk。当我们点击保存的时候,这些编辑软件已经"默默地"帮我们做了编码工作,那当我们再打开这个文件时,软件又默默地给我们做了解码的工作,将数据再解码成unicode,然后就可以呈现给用户了!

我们的文本编辑器有自己默认的编码解码方式,我们的解释器也有默认的编码方式,python2默认ASCII码,python3默认的utf8,可以通过如下方式查询
Python模块、字符编码、文件读写
sys.getdefaultencoding()

由于Python源代码也是一个文本文件,所以,当你的源代码中包含中文的时候,在保存源代码时,就需要务必指定保存为UTF-8编码。当Python解释器读取源代码时,为了让它按UTF-8编码读取,我们通常在文件开头写上这两行

Python模块、字符编码、文件读写
声明

第一行注释是为了告诉Linux系统,这是一个Python可执行程序,Windows系统会忽略这个注释;第二行注释是为了告诉Python解释器,按照UTF-8编码读取源代码.

python中可以通过encode() 方法以指定的编码格式编码字符串,decode()方法是解码
Python模块、字符编码、文件读写
encode()和decode()

文件读写

文件读写使用Python内置的open()函数,传入文件名、标示符和字符编码

“r”开放阅读(不填写标示符默认是读取),read()读取文件,记得一定要关闭close()
Python模块、字符编码、文件读写
read()

Python模块、字符编码、文件读写
readline()读一行
Python模块、字符编码、文件读写
readlines()以列表形式全部读取

Python模块、字符编码、文件读写
循环方式读取
Python模块、字符编码、文件读写
tell()和seek()

Python模块、字符编码、文件读写
可以使用readable()和writable()判断文件是否可读写

“w”开放写作,文件不存在创建文件,文件存在覆盖写入

Python模块、字符编码、文件读写
write()

Python模块、字符编码、文件读写
file2

Python模块、字符编码、文件读写
write()执行过程是先写入内存,等close()之后再写入硬盘,如果要边写边保存,需要使用flu

Python模块、字符编码、文件读写
可以使用readable()和writable()判断文件是否可读写

“x”创建一个新文件并将其打开以供写作,文件存在报错

Python模块、字符编码、文件读写
“x”

“a”用于书写,如果存在,则附加到文件的末尾。

Python模块、字符编码、文件读写
追加模式

Python模块、字符编码、文件读写
可以使用readable()和writable()判断文件是否可读写

"+" 表示可以同时读写某个文件,r+可读可写,w+可写可读,a+可写可读

Python模块、字符编码、文件读写
“+”

"U"表示在读取时,可以将 自动转换成 (与 r 或 r+ 模式同使用)
Python模块、字符编码、文件读写
"U"

"b"表示处理二进制文件(rb、wb、ab)
Python模块、字符编码、文件读写
"b"

为了避免打开文件忘了关闭,python可以通过with语句来自动帮我们调用close(),当with代码块执行完毕时,内部会自动关闭并释放文件资源

Python模块、字符编码、文件读写
with

Python模块、字符编码、文件读写
最后,如果你跟我一样都喜欢python,想成为一名优秀的程序员,也在学习python的道路上奔跑,欢迎你加入python学习群:839383765 群内每天都会分享最新业内资料,分享python免费课程,共同交流学习,让学习变(编)成(程)一种习惯!