好几天没有推文了,前几天正赶上期末写报告,所以推文停了几天。现在正式结课了,而且也搬到了新的工作地点,推文恢复正常节奏,欢迎各位的关注。
在前面的几篇推文中已经学习了Python中的数据结构、分支结构、循环结构、函数、面向对象编程。到现在为止,我们已经可以做很多的事情了。
如果有编程经验的朋友肯定会想到一个问题:到目前为止,我们所有的代码都是放在一个.py文件中的。很明显这不符合我们模块化开发的思想。什么是Python模块?Python模块是一个.py文件,我们可以把我们定义的函数、类、变量放在一个.py文件中。然后在另一个.py文件中引用这些函数、类、或者变量。 通过将代码分为一个个Python模块,可以方便我们更好的管理和调试代码。同时,我们还可以很方便去引用别人写好的模块。有什么优点用了才会知道。 [h3]1、从语法上理解什么是Python模块[/h3](1)第一种语法导入模块的语法如下:
- import moduleName1, moduleName2, ...
复制代码- #moduleName是我们要导入的模块的模块名,其实就是.py文件的文件名(不包括后缀名)
复制代码 调用模块中的函数的语法如下:
- moduleName1.functionName()
复制代码 下面还是通过一个例子来理解Python模块化操作:在support.py文件中定义两个函数:print1()、print2(),然后在test.py文件中调用support.py文件中定义的这两个函数support.py如下:
- print("我是support模块中的print1()")
复制代码- [/code][code]def print2():
复制代码- print("我是support模块中的print2()")
复制代码 test.py如下:
运行结果如下:
(2)第二种语法第(1)种语法调用模块中的函数的方式是moduleName.functionName(),这样似乎有点麻烦,我们也可以直接导入某一个模块中的函数,然后直接通过函数名来调用即可,不需要再指定模块名了。语法如下:
- from moduleName import functionName
复制代码- #moduleName是要导入的模块名,functionName是要导入的模块中的函数名
复制代码 接着上面的例子:
- from support import print1, print2
复制代码 或者通过from moduleName import *可以一次性导入moduleName模块中的所有的函数。
(3)第三种语法:用as指定别名
场景1:为模块指定别名我觉得support模块的名字比较长,每次调用的时候使用完整的support模块名有点繁琐。这个时候,你可以使用as来为这个模块指定一个更简单的别名。
场景2:为模块中的某一个函数指定别名- from support import print1 as p1
复制代码- from support import print2 as p2
复制代码 学习Python模块化编程的目的不光是为了方便管理自己的代码,同时也是为了方便使用第三方厂家开发的模块。Python社区非常非常的活跃,有很多优秀的免费的第三方模块供我们使用,所以这是学习Python必须要掌握的一个知识。
[h3]1、使用第三方模块openpyxl操作Excel文档[/h3]Python生态中有很多免费的优秀的第三方模块可以使用,这里我只介绍一下如何使用第三方模块操作Excel文档。这个模块在后面的小项目中会用到,所以在这里提前介绍一下。
我们需要的模块是openpyxl,这是由第三方厂家开发的模块,操作Excel文件时可读可写。
因为openpyxl模块是第三方开发的模块,因此在使用它之前先要手动安装它。
这里我使用pip工具来安装,pip 是 Python 包管理工具,该工具提供了对Python 包的查找、下载、安装、卸载的功能。使用pip安装openpyxl的命令如下:
安装成功后的提示如下:
原文档中的内容如下:
参考代码如下:
新建一个python文件为excel_operate.py,内容如下:
- [/code][code]class ExcelOperate(object):
复制代码- def __init__(self, file_name):
复制代码- self.__file_name = file_name
复制代码- self.__file = openpyxl.load_workbook(file_name)
复制代码- def get_sheets_name(self):
复制代码- names_list = self.__file.sheetnames
复制代码- def change_sheet_name(self, sheet_name, new_sheet_name):
复制代码- work_sheet = self.__file[sheet_name]
复制代码- work_sheet.title = new_sheet_name
复制代码- self.__file.save(self.__file_name)
复制代码- def read_sheet(self, sheet_name):
复制代码- work_sheet = self.__file[sheet_name]
复制代码- max_row_number = work_sheet.max_row
复制代码- max_col_number = work_sheet.max_column
复制代码- for i in range(1, max_row_number+1):
复制代码- for j in range(1, max_col_number+1):
复制代码- cell = work_sheet.cell(i, j)
复制代码- print(cell.value, end=" ")
复制代码- def append_row(self, sheet_name, new_row):
复制代码- work_sheet = self.__file[sheet_name]
复制代码- work_sheet.append_row(new_row)
复制代码- self.__file.save(self.__file_name)
复制代码- def modify_cell(self, sheet_name, cell):
复制代码- work_sheet = self.__file[sheet_name]
复制代码- work_sheet.cell(cell['row'], cell['col']).value = cell['value']
复制代码- self.__file.save(self.__file_name)
复制代码 新建一个test.py,然后导入我们刚才新建的python模块,下面只演示其中两种功能:
- #导入我们自己定义的excel_operate模块
复制代码- from excel_operate import ExcelOperate
复制代码- [/code][code]print("roommates.xlsx中所有表格名为:")
复制代码- op = ExcelOperate("roommates.xlsx")
复制代码- name_lists = op.get_sheets_name()
复制代码- [/code][code]print("\nmy_roommates表格的内容如下:")
复制代码- op.read_sheet("my_roommates")
复制代码 运行结果如下:
今天要学习的Python模块化编程内容比较少,到这儿就结束了。下一篇是Python入门系列的最后一篇推文了,学习的内容是:Python文件操作、Python中的异常处理。谢谢大家的持续关注。
|
|