Python 之 模块

Posted 思考与践行

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python 之 模块相关的知识,希望对你有一定的参考价值。

1. 模块

1.1 概念

  • 每一个以扩展名 .py 结尾的 Python 源代码文件都是一个模块;
  • 模块名同样也是一个标识符,需要符合标识符的命名规则;
  • 在模块中定义的全局变量, 函数, 类都是提供给外界直接使用的工具;

1.2 模块的两种导入方式

  • import 导入
  • from...import 导入
# 示例: import 导入
import 模块名1
import 模块名2


# 备注: 如果模块的名字太长,可以使用as指定模块的名称,以方便在代码中的使用
import 模块名1 as 模块别名(模块别名应该符合大驼峰命名法)


# 示例二: from ... import
# 如果希望从某一个模块中,导入部分工具,就可以使用 from ... import 的方式
from 模块名1 import 工具名

# 导入之后,不需要通过 模块名.
# 可以直接使用模块提供的工具(即全局变量,函数, 类)
# 如果两个模块,存在同名的函数,那么后导入模块的函数,会覆盖掉先导入的函数;

1.3 开发原则

  • __name__属性:测试模块的代码只在测试情况下被运行,而在被导入时,不会被执行!
  • __name__记录着一个字符串:
    • 如果是被其他文件导入的, __name__就是模块名;
    • 如果是当前执行的程序, __name____main__;
# 示例: 代码格式
# 1. 导入模块
# 2. 定义全局变量
# 3. 定义类
# 4. 定义函数

# 在代码的最下方
def main():
    # 编写测试代码
    pass

# 根据 __name__ 的值,判断是否执行下方代码
if __name__ = "__main__":
    main()

1.4 包(Package)

  • 包就是一个包含多个模块的特殊目录;
  • 目录下,有一个特殊的文件 __init__.py;
  • 包的命名方式和变量名一致;
  • 使用 import 包名 可以一次性导入包中所有的模块;
  • __init__.py中需要指定对外界提供的模块列表;
# 示例:
# 从 当前目录 导入 模块列表
from . import 模块1
from . import 模块2

1.5 发布模块

# 具体步骤(三步):
# 1) 创建 setup.py
from distutils.core import setup

setup(name="xxx_message", # 包名
      version="1.0", # 版本
      description="消息模块", # 描述信息
      long_description="详细的描述信息", # 完整描述信息
      author="noodles", # 作者
      author_email="[email protected]", # 作者邮箱
      url="www.google.com", # 主页
      py_modulse=["模块1",
                  "模块2"])

# 2) 构建模块
$ python3 setup.py build

# 3) 生成发布压缩包
$ python3 setup.py sdist

1.6 安装模块

  • 模块(包).__file__: 可以查看模块(包)的完整路径;
# 安装模块
$ tar -zxvf 模块压缩包
$ sudo python3 setup.py install

# 卸载模块,直接从安装目录下删除
$ cd /usr/local/lib/python3.5/dist-packages/
$ sudo rm -r 包名

1.7 pip 安装第三方模块

  • pip是一个现代的,通用的 Python 包管理工具;
  • 提供了对 Python 包的查找,下载,安装和卸载等功能;
# 将 pygame 模块安装到 python2.x 环境
$ sudo pip install pygame
$ sudo pip uninstall pygame

# 将 pygame 模块安装到 Python 3.x 环境
$ sudo pip3 install pygame
$ sudo pip3 uninstall pygame

# mac 下安装 iPython
$ sudo pip install ipython   # 针对 python2.x
$ sudo pip3 install ipython  # 针对 python3.x

2. 文件操作

2.1 操作文件的函数/方法

  • open函数,负责打开文件,并且返回文件操作对象;
  • read方法,将文件内容读取到内存;
  • write方法,将指定内容写入文件;
  • close方法,关闭文件;
  • 以上三个方法均需要通过文件对象来调用;

2.2 read方法--读取文件

  • open函数的第一个参数就是要打开的文件名(文件名区分大小写)
    • 如果文件存在,返回文件操作对象;
    • 如果文件不存在,会抛出异常;
  • read方法可以一次性读入并返回文件的所有内容;
  • close方法负责关闭文件;
  • 如果忘记关闭文件,会造成系统资源消耗,而且会影响到后续对文件的访问;
# 示例:
# 打开
file = open("a.txt")

# 读取
text = file.read()
print(text)

# 关闭
file.close()

2.3 文件指针

  • 文件指针标记从哪个位置开始读取数据;
  • 第一次打开文件时,通常文件指针会指向文件的开始位置;
  • 当执行了 read 方法后,文件指针会移动到读取内容的末尾;

2.4 打开文件的方式

  • open函数默认以只读方式打开文件,并且返回文件对象
f = open("文件名", "访问方式")

# 访问方式说明:
# r: 以只读方式打开文件;文件的指针将会放在文件的开头,这是默认模式;
# w: 以只写方式打开文件,如果文件存在会被覆盖;如果文件不存在,创建新文件;
# a: 以追加方式打开文件,如果该文件已经存在,文件指针将会放在文件的末尾; 如果文件不存在,创建新的文件进行写入;
# r+: 以读写方式打开文件;文件的指针将会放在文件的开头;如果文件不存在,抛出异常;
# w+: 以读写方式打开文件;如果文件存在会被覆盖;如果文件不存在,创建新文件;
# a+: 以读写方式打开文件;如果该文件已经存在,文件指针将会放在文件的末尾; 如果文件不存在,创建新的文件进行写入;

# 备注:频繁的移动文件指针,会影响文件的读写效率;开发中,更多的时候会以只读,只写的方式来操作文件;
# a(append)

2.5 按行读取文件内容

  • readline方法可以一次读取一行内容;
  • 方法执行后,会把文件指针移动到下一行,准备再次读取;
  • read方法默认会把文件的所有内容一次性读取到内存。如果文件太大,对内存的占用会非常严重;
# 打开文件
file = open("a.txt")

while True:
    # 读取一行内容
    text = file.readline()

    # 判断是否读到内容
    if not text:
        break

    # 没读取一行的末尾已经有一个 '\n'
    print(text, end="")

# 关闭文件
file.close()


# 示例: 文件复制
# 1. 打开文件
file_read = open("a.txt")
file_write = open("b.txt", "w")

# 2. 读 写
while True:
    # 读取到一行内容
    text = file_read.readline()

    # 判断是否读取到内容
    if not text:
        break

    file_write.write(text)

# 3. 关闭
file_read.close()
file_write.close()

2.6 文件/目录的常用管理操作

  • 需要导入 os 模块
  • os.rename(源文件名, 目标文件名): 重命名;
  • os.remove(文件名): 删除文件;
  • os.listdir(目录名): 目录列表;
  • os.mkdir(目录名): 创建目录;
  • os.rmdir(目录名): 删除目录;
  • os.getcwd(): 获取当前目录;
  • os.chdir(目标目录): 修改工作目录;
  • os.path.isdir(文件路径): 判断是否是文件;

3. eval()函数

  • eval()函数,可以将字符串当成有效的表达式来求值,并返回计算结果
  • eval("1 + 1"), 输出结果: 2
# 示例: 计算器

# 提示用户输入一个加减乘除混合运算表达式
input_str = input("请输入一个算术题: ")

print(eval(input_str))

# 备注: 开发时,千万不要使用 eval() 函数,直接转换 input 的结果
# 原因:类似于"注入攻击"

# 当用户输入: __import__('os').system('ls')
# 等价于:
import os
os.system("终端命令")


以上是关于Python 之 模块的主要内容,如果未能解决你的问题,请参考以下文章

python之基础篇——模块与包

常用python日期日志获取内容循环的代码片段

Python3 关于excel 文件格式xls之读取写入和追加

Python - 模块

Python练习册 第 0013 题: 用 Python 写一个爬图片的程序,爬 这个链接里的日本妹子图片 :-),(http://tieba.baidu.com/p/2166231880)(代码片段

python中的模块