编程语言
C#编程语言基础
C#面向对象与多线程
C#数据及文件操作
JavaScript基础
JavaScript的数据类型和变量
JavaScript的运算符和表达式
JavaScript的基本流程控制
JavaScript的函数
JavaScript对象编程
JavaScript内置对象和方法
JavaScript的浏览器对象和方法
JavaScript访问HTML DOM对象
JavaScript事件驱动编程
JavaScript与CSS样式表
Ajax与PHP
ECMAScript6的新特性
Vue.js前端开发
PHP的常量与变量
PHP的数据类型与转换
PHP的运算符和优先规则
PHP程序的流程控制语句
PHP的数组操作及函数
PHP的字符串处理与函数
PHP自定义函数
PHP的常用系统函数
PHP的图像处理函数
PHP类编程
PHP的DataTime类
PHP处理XML和JSON
PHP的正则表达式
PHP文件和目录处理
PHP表单处理
PHP处理Cookie和Session
PHP文件上传和下载
PHP加密技术
PHP的Socket编程
PHP国际化编码
MySQL数据库基础
MySQL数据库函数
MySQL数据库账户管理
MySQL数据库基本操作
MySQL数据查询
MySQL存储过程和存储函数
MySQL事务处理和触发器
PHP操作MySQL数据库
数据库抽象层PDO
Smarty模板
ThinkPHP框架
Python语言基础
Python语言结构与控制
Python的函数和模块
Python的复合数据类型
Python面向对象编程
Python的文件操作
Python的异常处理
Python的绘图模块
Python的NumPy模块
Python的SciPy模块
Python的SymPy模块
Python的数据处理
Python操作数据库
Python网络编程
Python图像处理
Python机器学习
TensorFlow深度学习
Tensorflow常用函数
TensorFlow用于卷积网络
生成对抗网络GAN
程序中经常有对文件的输入/输出操作,Python语言也提供了操作文件的方法和类。Python文件可分为文本文件和二进制文件,文本文件中存放的是字符;二进制文件是按内存中的存储形式原样输出到磁盘上存放,比如图像、声音、视频、可执行文件等。
1. 打开和关闭文件:
1)打开文件:
对文件进行操作前要先打开文件,使用open()函数。语法:
open(name[, mode[, buffering]])
其中,name表示需要打开的文件名;mode是打开的模式,默认为r;buffering用来控制文件的缓冲,默认为0,表示不缓冲,设置1就会有缓冲。其中的模式值有:
参数 |
描述 |
r |
读模式打开文件 |
w |
写模式打开文件 |
a |
追加模式打开文件,文件的位置指针在文件尾部 |
b |
二进制模式打开文件,可与其他模式并用,如rb、wb、ab |
+ |
读/写模式,可与其他模式并用,如r+、w+、a+、rb+、wb+、ab+ |
U |
支持换行符,如\n、\r、\n\r等 |
注:使用r+方式打开文件时,该文件应该已经存在;用w+方式打开文件时,如果文件存在则覆盖现有文件,如果不存在则创建;用a+打开文件,保留文件中原有的数据,文件的位置指针在文件尾部,如果不存在则创建新文件。
当使用open()函数打开视频或图片文件时,必须使用b模式。示例:
o=open('d:\index.txt', 'w')
2)文件对象属性:
文件被打开,就可以通过文件对象的属性得到有关该文件的一些信息:
属性 |
含义 |
closed |
如果文件被关闭则返回True,否则返回False |
mode |
返回该文件的打开方式 |
name |
返回文件的名称 |
使用方法:文化对象名.属性名
示例:
fo=open("file.txt","wb")
print("Name of the file: ", fo.name)
3)文件对象方法:
Python文件对象有很多方法,通过这些方法可以实现各种文件操作。
方法 |
含义 |
close() |
把缓冲区的内容写入磁盘,关闭文件,释放文件对象 |
flush() |
把缓冲区的内容写入磁盘,不关闭文件 |
read([count]) |
如果有count参数,则从文件中读取count字节,省略时读取整个文件 |
readline() |
从文本文件中读取一行内容 |
readlines() |
从文本文件中读取所有行,每一行作为列表的成员,方返回这个列表 |
seek(offset[,where]) |
把文件指针移动到相对于where的offset位置,where为0表示文件开始处,为默认值;1表示当前位置;2表示文件结尾 |
tell() |
获得当前文件指针位置 |
truncate([size]) |
删除从当前指针位置到文件末尾的内容。如果指定了size,则不论指针在什么位置都留下前size个字节,其余的被删除 |
write(string) |
把string字符串写入文件 |
writelines(list) |
把列表中的字符串一行一行地写入文本文件,是连续写入文件,没有换行 |
nezt() |
返回文件的下一行,并将文件操作标记移到下一行 |
3)关闭文件:
对文件操作结束后需要关闭文件,使用close()函数。语法:
o.close()
每次操作文件之后都要调用close()函数来释放资源。
2. 文本文件的操作:
文本文件是以字符形式存储的文件,英文、数字等字符存储的是ASCII码,汉字等是以机内码形式存储。文本文件方便阅读和创建,表示信息的单位至少是一个字符,一般从第一个数据开始依次读/写,为顺序文件,但其中除了字符信息,不能存储其他信息。
1)文本文件的读取:
Python对文本文件提供了read()、readline()、readlines()方法用于读取文本文件的内容。
⑴read()方法:
content=fo.read([count])
此方法用来读取从当前位置直到文件末尾的内容,并作为字符串返回。如果是刚打开的文件,则读取整个文件。read()方法可以带参数count,是读取从当前位置开始的count个字符,如果文件结束就读到文件结束为止。
⑵readline()方法:
content=fo.readline([count])
此方法读取从当前位置到行末的所有字符,并作为字符串返回。通常用来读取文件的当前行,包括行结束符。如果当前处于文件末尾,则返回空串。
⑶readlines()方法:
listcontent=fo.readlines()
此方法读取从当前位置直到文件末尾的所有行,并将这些行构成列表返回。列表中的元素即每一行构成的字符串。如果当前处于文件末尾,则返回空列表。
2)文本文件的写入:
当文件以写方式打开时,可以向文件写入文本内容,有write()、writelines()方法。
⑴write()方法:
fo.write(content)
此方法在文件当前位置写入字符串,并返回字符的个数。
⑵writelines()方法:
fo.writelines(listcontent)
此方法在文件当前位置处依次写入列表中的所有字符串。其中并不会自动加入换行符,如果必要,必须在每一行字符串末尾加上换行符。
3)文件迭代:
Python引入了文件迭代,文件对象为自己的迭代器,通过文件迭代可以访问到文件中的每一行数据。for循环会自动调用next()方法读取下一行,并在所有行结束后捕获StopIteration异常,停止循环。示例:
f=open('D:\\MyDocuments\\Python\\basic\\forarray.py','r')
for eachline in f:
print(eachline)
3. 二进制文件的操作:
二进制文件存储内容为字节码,甚至可以用二进制位来代表一个信息位。二进制文件一般采用随机存取。
1)文件的定位:
文件中有一个指针,指向当前读/写位置,读/写一次指针向后移动一次。但为了主动调整指针位置,可使用文件指针定位方法。
⑴tell()方法:
location=fo.tell()
此方法返回当前文件的位置,即相当于文件开始位置的字节数,下一次读取或写入操作将发生的当前位置。文件第一个字符的位置为0。
⑵seek()方法:
fo.seek(offset[,where])
此方法用来更改当前文件的位置,偏移参数offset指示要移动的字节数,移动时以设定的参考点where为基础。偏移offset为正数表示向文件尾方向移动,偏移为负表示向文件头方向移动。参考点where指定移动的基准位置,如果设定为0,则表示以文件开始为基准位置,此为默认值;设置为1,是使用当前位置为基准;如果设置为2,则以文件末尾为基准。
文本文件也可以使用seek()方法,但只能相对于文件起始位置移动,当相对于当前位置和文件末尾进行位置移动时,偏移量只能取0。
2)二进制文件的读写:
使用open()方法打开二进制文件时,在打开方式上要加上b,如rb、wb、ab等。
⑴read()和write()方法:
二进制文件的读写可以使用文件对象的read()和write()方法。
⑵struct模块:
Python没有二进制类型,但可以存储二进制类型的数据,就是用字符串类型来存储二进制数据。Python中struct模块的pack()和unpack()方法可以用来处理。
pack()方法可以把整型(或浮点型)打包成二进制的字符串。示例:
import struct
a=65
bytes=struct.pack('i',a) # 将a变为4字节二进制字符串b'A\x00\x00\x00'
# 写入文件
fo=open('data.txt','wb')
fo.write(bytes)
fo.close()
读文件时,可以一次读取4个字节,然后用unpack()方法转换成整数。示例:
fo=open('data.txt','rb')
bytes=fo.read(4)
a=struct.unpack('i',bytes) # unpack()执行后会得到一个元组,这里为(65,)
fo.close()
如果写入的数据是由多个数据构成的,则需要在pack()方法中使用格式串:
格式符 |
Python类型 |
字节数 |
格式符 |
Python类型 |
字节数 |
b |
整型 |
1 |
B |
整型 |
1 |
h |
整型 |
2 |
H |
整型 |
2 |
i |
整型 |
|
I |
整型 |
4 |
l |
整型 |
4 |
L |
整型 |
4 |
q |
整型 |
8 |
Q |
整型 |
8 |
p |
字符串 |
1 |
P |
整型 |
|
f |
浮点数 |
4 |
d |
浮点数 |
8 |
s |
字符串 |
1 |
? |
布尔型 |
1 |
c |
单个字符 |
1 |
|
|
|
示例:
a=b'hello';b=b'world!';c=2;d=45.123
bytes=struct.pack('5s6sif',a,b,c,d) # b'helloworld!\x00\x02\x00\x00\x00\xf4}4B'
fo=open('data1.txt','wb')
fo.write(bytes)
fo.close()
读取时:
fo=open('data1.txt','rb')
fo.read(4)
fo.close()
a,b,c,d=struct.unpack('5s6sif',bytes)
print(a,b,c,d) # b'hello' b'world!' 2 45.12300109863281
其中,格式化字符串('5s6sif'中,5s表示占5个字符的字符串,2i表示2个整数。
⑶pickle模块:
Python有pickle模块,用于把Python对象直接写入文件中,而不需要转换为字符串再存储。其中主要有dump()和load()两个常用方法.
dump()方法:pickle.dump(data,fo)
用于把数据对象data转换为字节字符串,并不存在文件fo中。示例:
import pickle
info={'one':1,'two':2,'three':3}
f1=open('file1','wb')
pickle.dump(info,f1)
f1.close()
load()方法:content=pickle.load(fo)
用于从文件中读取字符串,并将它们转换为Python的数据对象。示例:
import pickle
f2=open('file1','rb')
info=pickle.load(f2)
f2.close()
print(info)
⑷shelve模块:
Shelve模块也提供二进制文件操作功能,可以像字典赋值那样写入二进制文件,也可以像字典读取二进制文件。示例:
import shelve
fp=shelve.open('shelve_test.dat')
txt={'age':38,'sex':'Male','address':'bj'}
fp['txt']=txt
listi={'age':40,'sex':'Male','qq':'12345678','tel':'7654321'}
fp['listi']=listi
fp.close()
fp=shelve.open('shelve_test.dat')
print(fp['txt'] ['age'])
print(fp['listi']['qq'])
fp.close()
⑸marshal模块:
import marshal
x1=30
x2=5.0
x3=[1,2,3]
x4=[4,5,6]
x5={'a':1,'b':2,'c':3}
x6={7,8,9}
x=[eval('x'+str(i)) for i in range(1,7)]
print(x)
with open('test.dat','wb') as fp:
marshal.dump(len(x),fp)
for item in x:
marshal.dump(item,fp)
with open('test.dat','rb') as fp:
n=marshal.load(fp)
for i in range(n):
print(marshal.load(fp))
5. StringIO类文件:
Python的文件接口不仅能处理磁盘文件,其中的处理函数还可以用于与文件对象类似的对象,如内存字节流、网络流、自定义流等。Python的标准库中有很多类文件,如sys.stdin、sys.stdout、sys.stderr、urllib、socket、StringIO。
标准输入sys.stdin为解释器提供输入字节流,通常映射到键盘输入;标准输出sys.stdout接收print语句的输出,产生屏幕输出;标准错误sys.stderr接收出错信息,产生屏幕输出。一般情况下,程序运行时,三个标准文件sys.stdin、sys.stdout、sys.stderr可以直接访问,因为系统会自动打开这三个文件。导入sys模块后,就可以使用sys.stdin、sys.stdout、sys.stderr来访问这三个标准文件了。
StringIO是在内存中创建的,常用作临时缓冲,即使用StringIO类能将内存数据当成文件来操作,通过StringIO可将Matplotlib用于Web环境中。StringIO类在io模块中,使用前要导入io模块。
1)创建StringIO类文件:
构造函数用于创建StringIO类文件,在构造函数中传入字符串,创建出有内容的StringIO类文件。如果没有字符串,构造的是空StringIO类文件。示例:
from io import StringIO
f=StringIO('String example\n')
2)读写StringIO类文件:
读写StringIO类文件与读写普通磁盘文件类似,也支持read()、readline()、readlines()、write()、writelines()等函数。示例:
from io import StringIO
f=StringIO()
f.write('have a nice day\n')
f.writelines(['Well begun is half dine.\n','Every beginning is hard.\n'])
f.read() # 在文件末尾读出空串 ''
f.seek(0,0) # 回到文件开头
f.read() # 读取文件所有内容
f.readline() # 在文件末尾读出空字符串
f.seek(0,0) # 回到文件开头
f.readline() # 读取第一行
# 迭代读出剩余行
for eachline in f.readlines():
print(eachline)
StringIO类还提供了getvalue()方法,不需要先将文件指针移至文件头再读取文件的内容。
from io import StringIO
f=StringIO()
f.write('getvalue example\n')
f.getvalue()
3)使用StringIO捕获输出:
通常,输出是默认输出到显示器,但是通过修改标准文件sys.stdout,可以将标准输出改为输出到内存。可将print输出内容先输入到内存,检查并替换后再输出到显示器。示例:
from io import StringIO
import sys
f=StringIO()
stdout=sys.stdout # 暂存标准输出至变量stdout
sys.stdout=f # 标准输出被替换为StringIO
print('matlab')
print('C++')
print('Computer')
print('Java')
strf=f.getvalue().replace('Computer','Python')
sys.stdout=stdout # 标准输出从staout变量还原
print(u'原始输出')
print(f.getvalue())
print(u'更替后输出')
print(strf)
f.close()
4)自定义类文件对象:
用户可以自定义类文件对象,需要在其中定义read()和write()等方法,这样类文件可以使用Python的文件接口来操作。示例:
class MyFileLike(object):
'''自定义类文件'''
def __init__(self):
self._container=''
def write(self,content):
self._container+=content
def read(self):
return self._container
5. os模块函数:
Python标准库中的os模块包含了普通的操作系统功能,提供了操作系统的接口函数,这些接口函数通常指定了操作平台,能在不同操作系统平台下对特定函数自动切换而实现跨平台操作。os模块的跨平台属性:
os模块属性 |
描述 |
linesep |
行分隔符 |
extsep |
扩展名分隔符 |
sep |
路径分隔符 |
pathsep |
多路径分隔符 |
curdir |
返回当前目录 |
os模块中常见的函数有:
函数 |
描述 |
os.sep |
可以取代操作系统特定的路径分隔符 |
os.name |
指示正在使用的平台,nt为Windows;posix为Linux/Unix |
os.getcwd() |
得到当前工作目录,即当前Python脚本的目录路径 |
os.getenv() |
读取环境变量 |
os.putenv() |
设置环境变量 |
os.listdir() |
返回指定目录下的所有文件和目录名 |
os.mkdir() |
创建目录 |
os.makedirs() |
可创建多层目录 |
os.rmdir() |
删除目录 |
os.removedirs() |
删除多层目录 |
os.remove() |
删除一个文件 |
os.system() |
运行shell命令 |
os.listdir(dirname) |
列出dirname下的目录和文件 |
6. os.path模块:
os.path模块提供对文件路径操作的函数,可以操作文件路径中的各个部分,如查询目录路
径、查询不带路径的文件名、查询路径是不是绝对路径等。
函数 |
描述 |
os.path.exists(path) |
查询路径是否存在 |
os.path.isabs(path) |
查询路径是否为绝对路径 |
os.path.isdir(path) |
查询路径是不是已存在目录 |
os.path.isfile(name) |
查询是不是已存在的文件 |
os.path模块还提供了文件信息查询函数:
函数 |
描述 |
os.path.getatime(filename) |
查询文件最近访问时间 |
os.path.getctime(filename) |
查询文件创建访问时间 |
os.path.getmtime(filename) |
查询文件最近修改时间 |
os.path.getsize(filename) |
查询文件大小,以字节为单位 |
os.path模块还有其他一些函数:
函数 |
描述 |
os.path.split() |
返回一个路径的目录名和文件名元组 |
os.path.split(name) |
分割文件名和目录名,成为元组 |
os.path.chdir(dirname) |
改变工作目录到dirname |
os.path.abspath(name) |
获得绝对路径 |
os.path.join(path, name) |
连接目录与文件名或目录 |
os.path.basename(path) |
返回文件名 |
os.path.dirname(path) |
返回文件路径 |
os.path.splitdrive(path) |
返回一个盘符和不带盘符路径的元组 |
os.path.splittext() |
返回一个路径和主文件名、扩展名的元组 |
7. shutil模块函数:
shutil模块是高层次文件操作工具,可以进行文件复制和备份等操作。常用函数有:
函数 |
描述 |
shutil.copyfile(src, dst) |
从源src复制到dst中,前提是目标地址具备可写权限 |
shutil.copymode(src, dst) |
只复制其权限 |
shutil.copystat(src, dst) |
复制权限、最后访问时间、最后修改时间 |
shutil.copy(src, dst) |
复制一个文件到另一个文件或另一个目录 |
shutil.copy2(src, dst) |
在复制的基础上再复制文件最后访问时间与修改时间 |
shutil.copyfileobj(src, dst[,len]) |
将源文件对象的内容复制到目标类文件对象,len指定缓存尺寸 |
shutil.move(src, dst) |
移动文件和目录,如果两个文件系统是一样的相当于执行rename操作,如果是在不同文件系统下就做move操作 |
shutil.copytree ( olddir, newdir, True/False) |
把olddir复制一份newdir,如果第3个参数为True则复制目录将目录下的符号连接;如果为False则将在复制的目录下生成物理副本来替代符号连接 |
shutil.rmtree ( dir,) |
删除整个目录树 |
shutil模块也提供了创建压缩文件的函数:
函数 |
描述 |
shutil.make_archive(filename, format[,root[basic]]) |
创建压缩文件,文件名需包含路径,格式参数可以是zip、tar、bztar、gztar,root是根目录,basic是基础目录,默认都是当前目录 |
shutil.get_archive_formats() |
返回支持的列表格式,默认支持zip、tar、bztar、gztar |
8. 文件操作:
1)os.rename()方法:
该方法位于对文件和路径重命名。示例:
import os
os.rename('text1.txt','text2.txt')
os.renames()方法也更改文件名和路径,如果路径中有不存在的目录会自动建立。示例:
os.renames('e:\\mydoc\\text1.txt','d:\\python\\text2.txt')
2)os.remove()/unlink()方法:
该方法用来删除文件。示例:
import os
os.remove('test2.txt')
3)os.stat()方法:返回文件信息
4)os.utime(filename,(访问时间,修改时间))方法:更新访问和修改时间
如果(访问时间,修改时间)指定为None,则用当前时间来更新。
5)tmpfile()方法:创建并打开一个新的临时文件
9. 目录操作:
1)mkdir()方法:
该方法位于os模块中,用来创建一个目录。语法:
import os
os.mkdir(dir)
2)makedirs()方法:
该方法位于os模块中,可以创建多级目录。语法:
import os
os.makedirs(dir)
示例:
import os
os.makedirs("d:\\itzcn\\2018-01\\01")
3)rmdir()方法:
该方法位于os模块中,用来删除空目录,如果该目录中存在子目录或文件就会抛出异常。
import os
os.rmdir(dir)
4)rmtree()方法:
该方法位于shutil模块中,用来删除非空目录。语法:
import shutil
shutil.rmtree(dir)
5)chdir()方法:
用来改变当前目录。示例:
import os
os.chdir('d:\\home')
6)getcwd()方法:
用来显示当前的工作目录。语法:
import os
os.getcwd()
7)walk()方法:
该方法位于os模块中,用来读取指定目录下的文件。语法:
import os
os.walk(path, func, parm)
其中,path表示需要遍历的目录树的路径;func表示回调函数,对遍历路径进行处理;parm与func相关,用来传递回调函数中的参数值。该函数只产生文件路径。
8)path.walk()方法:
import os
os.path.walk(path, topdown=True, onerror=None)
其中,path为需要遍历的目录树路径;topdown的默认值为True,表示首先返回目录树下的文件,然后遍历目录树的子目录,而当为False时,表示先遍历目录树的子目录,然后返回子目录下的文件,最后返回根目录下的文件;onerror的默认值为None,表示忽略文件遍历时所产生的错误。
10. 权限管理函数:
os模块还有文件权限管理的方法。
函数 |
描述 |
access(filename,mod) |
检验文件权限模式 |
chmod(filename,mod) |
更改文件权限模式 |
umask(mod) |
设置新权限模式,并返回旧权限模式 |
11. 读写Excel文件:
Excel是一种常用的办公软件,用来存储、管理、处理数据和进行统计分析。Python中有xlrd、xlwt、xlutils模块用来读、写、修改Excel文件。
一个Excel文件对应一个工作簿workbook,工作簿中包含若干张工作表worksheet,每张工作表包含若干行、列交叉形成的单元格,单元格中存储着数据信息。Python访问Excel文件中中的数据时,首先要利用相应库打开workbook对象,然后通过workbook对象访问worksheet对象,最后通过worksheet对象访问具体单元格,操作相应数据。
1)xlwt库:
xlwt库是写Excel文件的Python库,用来创建并保存工作簿。使用前先导入模块:
import xlwt
写Excel文件前,先调用Workbook()方法创建空白工作簿:
b1=xlwt.Workbook()
调用add_sheet()方法向工作簿中添加工作表,并指定工作表标签:
shee1=b1.add_sheet('mysheet1')
shee2=b1.add_sheet('mysheet2')
调用write()方法向单元格中写入内容,第1个参数为行号,第2个参数为列号,行列号都从0开始:
sheet.write(0,0,'cell(0,0)')
sheet.write(5,3,'hello')
也可以通过工作表的行对象来访问单元格:
row1=sheet2.row(2)
row1.write(3,'r2')
可以工作表的列对象对列进行操作,但列对象不能调用write()方法:
col1=sheet2.col(4)
col1.width=20000
写完工作簿后,调用save()方法保存工作簿。
b1.save('d:\\myfirstbook.xls')
2)xlrd库:
xlrd是读Excel文件的Python库,用来读取工作簿中的数据。使用前先导入模块:
import xlrd
利用open_workbook()方法打开工作簿:
efile=xlrd.open_workbook('d:\\myfirstbook.xls')
利用sheet_by_index()或sheet_by_name()方法获取工作表,记不住工作表标签时建议使用sheet_by_index()函数,工作表编号从0开始计数。
esheet1=efile.sheet_by_index(0)
esheet2=efile.sheet_by_name('mysheet2')
通过访问工作表的cell_value()属性获取单元格内容:
print(esheet1.cell_value(0,0))
print(esheet1.cell_value(5,3))
print(esheet2.cell_value(2,3))
在获取worksheet对象后,也可通过下面几种方式获取数据。取整行和整列的值(数组):
esheet1.row_values(行号)
esheet1.col_values(列号)
获取行数和列数:
nrows=esheet1.nrows
ncols=esheet1.ncols
循环行列表数据:
for i in range(nrows):
print(sheettable.row_values(i))
获取单元格:
cell_A1=esheet1.cell(0,0).value
cell_C4=esheet1.cell(1,1).value
使用行列索引:
cell_A1=esheet1.row(0)[0].value
cell_A2=esheet1.col(1)[0].value
3)xlutils库:
可以借助xlutils库来完成修改操作。使用前先导入xlrd和xlutils模块:
import xlrd
from xlutils.copy import copy
利用open_workbook()方法打开工作簿:
dfile=xlrd.open_workbook('d:\\myfirstbook.xls')
复制工作簿:
cfile=copy(efile)
用get_sheet()方法获得工作表对象:
ws=cfile.get_sheet(0)
ws.write(0,0,'edited')
cfile.save('d:\\myfirstbook.xls')
12. 其他一些与文件操作有关的模块:
1)直接调用Windows API函数:使用Pywin32模块
2)访问动态链接库DLL功能:使用ctypes模块
3)查询进程及系统资源占有率:使用psutil模块
4)监视Windows系统进程:使用wmi模块
5)计算文件的CRC32值:使用zlib库的crc32方法
6)读写Word文件:使用docx模块
7)操作Excel文件:使用xlwt模块
8)读写Excel2007等高版本Excel文件:使用openpyxl模块
9)访问zip和apk压缩文件:使用zipfile模块
10)访问rar压缩文件:使用rarfile模块