文件和模块

文件和模块

 一:  模块使用

 二:  包的使用

 三:  常用模块

 四:  文件的操作

 

 

 

模块使用

 

模块 Module
  什么是模块
    模块是一个包含有一系列数据,函数,类等组成的程序组
    模块是一个文件 ,模块文件名通常以.py结尾

  作用:
    让一些相关的数据,函数,类等有逻辑的组织在一起,使逻辑结构更新加清晰
    模块中的数据,函数和类等可以提供给其它模块或程序使用

模块的分类:
  1. 内置模块, 在解释执行器内部定义,可以直接使用
  2. 标准库模块, 安装python时已安装且可以直接使用
  3. 第三方模块(通常为开源), 需要自己安装
  4. 用户自定义模块(可以作为其它人的第三方模块)

------------------------------------------------------------

模块的导入 import
  import 语句
  语法:  import 模块名1 [as 模块新名1], 模块名2 [as 模块新名2], ...
  作用:  将某模块整体导入到当前模块中
  示例:
    import math # 导入数学模块
    import sys, time # 导入系统模块和时间模块

  用法:
    模块名.属性名
  如:
    print(math.factorial(5))
    print(math.cos(0))

----------------------------------------------------------

from import 语句
  语法:  from 模块名 import 模块属性名1 [as 属性新名1], 模块属性名2 [as 属性新名2], .....
  作用:  将某模块内的一个或多个属性导入到当前模块的作用域
  示例:
    from math import factorial as fac
    from math import sqrt
    from math import pi, e, sin, cos
    print('5的阶乘是:', fac(5))
    print('9的平方根是:', sqrt(9))
    print('圆周率是:', pi)

-----------------------------------------------------------

from import * 语句
  语法:   from 模块名 import *
  作用:   将某模块的所有属性导入到当前模块
  示例:
    from math import *
    print(sin(pi/2))
    print(factorial(5)) # 可以直接使用math里的全部属性

 

函数:
  dir(obj)函数,返回所有属性的字符串列表
  help(obj)函数,可以查看模块的文档字符串

dir 函数:
    dir([对象]) 返回一个字符串列表
    作用:
        1.如果没有参数调用,则返回当前作用域内所有变量的列表
        2.如果给定一个对象作为参数,则返回这个对象的所有变量的列表
            1) 对于一个模块,返回这个模块的全部属性
            2) 对于一个类对象,返回类对象的所有变量并递归基类对象的所有变量
            3) 对于其它对象返回所有变量,类变量和基类变量                

 

 

 

 

 

用户自定义模块
  要求:
    模块名以".py"结尾
    模块名必须是标识符的命名规则
    避免名称和内建模块冲突
  导入方式:
    import 语句
    from import 语句
    from import * 语句

 


import 语句的搜索路径顺序
  1. 索引内建模块 builtin
  2. 搜索程序的运行时路径(当前路径)
  3. sys.path提供的路径
  两种方法让用户自定义模块被导入:
    1) 将模块安装(复制)到 sys.path提供的路径
    2) 在运行程序时,在sys.path里添加自定义的路径

 


模块的加载过程:
  在模块导入时,模块的所有语句都会执行
  如果一个模块已经被导入,则再次导入时不会重新执行模块内的语句

 


模块的重新加载:
  import mymod
  import imp
  imp.reload(mymod)

----------------------------------------------------------------------

 

模块被导入和执行的过程
  1. 先搜索相关路径找模块文件(.py文件)
  2. 判断是否有此模块对应的.pyc,如果pyc文件存在且比.py文件新则直接加载.pyc文件 
  3.否则用模块名.py 文件生成.pyc 并加载执行

 

模块的编译
  编译 解释执行
    mymod.py ---> mymod.pyc ----> python3

 


模块的属性

  模块的文档字符串
  模块内的第一次没有赋值给任何变量的字符串为模块的文档字符串
  模块内的文档字符串绑定在模块的__doc__属性上

  __doc__ 属性 用来绑定文档字符串
  __file__属性
  __file__ 属性用于绑定此模块对应的文件路径
  __name__属性
    作用:
      1. 用来记录模块自身的名字
      2. 用来判断是否为主模块
     (注: 主模块是指程序最先被python3执行的模块)
    说明:
      当此模块为主模块运行时,__name__的值为'__main__'
      当此模块不是主模块时,__name__绑定模块的名字

 

 


模块的__all__ 列表:
模块中的__all__列表必须是一个字符串列表
作用:  当用from xxx import *导入时,只导入__all__列表内的属性

 

模块的隐藏属性
  模块中以'_' 开头的属性,在from xxx import *导入时将不 被导入,通常称这些属性为隐藏属性

 

 

 

 

包的使用

包(模块包) Package
  包的定义
    包是将模块以文件夹的组织形式进行分组管理的方法
  作用:
    将一系列模块进行分类管理,有利于防止命名冲突
    可以在需要时加载一个或部分模块而不是全部模块

包内的 __init__.py 文件 
    __init__.py 是常规包内必须存在的文件
    __init__.py 文件会在包加载时被自动调用
    作用:
        编写此包的内容
        编写包的文档字符串

 

包的导入:
  规则类似于模块的导入规则
  import 包名 [as 包新名]
  import 包名.模块名 [as 模块新名]
  import 包名.子包名.模块名 [as 模块新名]
  ..................

  from 包名 import 模块名 [as 模块新名]
  from 包名.子包名 import 模块名 [as 模块新名]
  from 包名.子包名.模块名 import 属性名 [as 属性新名]
  .................

  from 包名 import *
  from 包名.模块名 import *
  ................

import 语句搜索引 包的路径顺序
  1. 搜索程序运行时的路径(当前路径)
  2. sys.path提供的路径

 

__init__.py 内的__all__列表
作用:
    用来记录此包中有哪儿些子包或模块需要导入
    当用from 包 import *语句导入模块时,只查找 __all__ 列表中所有的模块或子包
说明:
    __all__列表只有在from xxx import *导入时起作用

 



包的相对导入
  包的相对导入是指包内模块的相互导入

语法:
  from 相对路径包或模块名 import 属性或模块名
  或
  from 相对路径包或模块名 import *
相对路径
  在 from 和 import 间可以用相对路径:
    . 代表当前目录
    .. 代表上一级目录
    ... 代表上二级目录
    .... 以此类推
注: 相对导入时不能超出包的外部

 

常用模块

持续更新中.........

 

 

 

文件的操作

文件 File
  什么是文件
    文件是用于数据存储的单位
    文件通常用来长期存储数据
    文件中的数据是以字节(byte)为单位进行存储的

文件的操作流程:
  1. 打开文件
  2. 读/写文件
  3. 关闭文件
  注:任何操作系统,一个应用程序同时打开文件的数量有最大数限制

 

文件的打开函数:
  open(file, mode='rt') 用于打开一个文件,返回此文件对应的文件流对象,如果打开失败则会触发OSError错误

文件的关闭方法:
  F.close() # 关闭文件,释放系统资源

-----------------------------------------------------------------

文本文件的操作:
文本文件的模式字符 't'

说明:
  1. 对文本文件的读写需要用字符串str 进行读取和写入数据
  2. 默认文件中存储的都是字符(文字)数据,在读写中会自动进行编码转换操作
  3. 以行为单位分隔,在python内统一用'\n'作用换行符进行分隔

 

各操作系统的换行符:
  Linux换行符: '\n'
  Windows 换行符: '\r\n'
  旧的Macintosh换行符: '\r'
  新的Mac OS 换行符: '\n'
  文件流对象常用的方法见:
  python_base_docs_html/文件.html


文本文件读方法:
  F.readline()
  F.readlines()
  F.read([字符数或字节数])

文本文件的写方法
  模式字符串: 'w'/'x'/'a'
  F.write(字符串)
  F.writelines(字符串列表)

 

文件的迭代读取
  文件流对象是可迭代对象,迭代过程将以换行符'\n'作用分隔符依次获取

示例:
  f = open('mynote.txt', 'rt')
  for line in f: # f绑定的文件流对象是可迭代对象
  print(line)

标准输入输出文件:
    sys.stdin 标准输入文件(默认为键盘设备)
    ctrl + d 快捷键是让键盘输入文件结束符
    sys.stdout 标准输出文件 (默认为屏幕终端)
    sys.stderr 标准错误输出文件(默认为屏幕终端)
模块名: sys

说明:
    1. 标准文件不需要打开和关闭就可以使用
    2. 每一个python程序启动后都会有以上三个文件供我们使用

 

 

 

二进制文件操作:
  模式字符: 'b'
  默认文件中存储的都是以字节为单位的数据,通常有人为的格式
  对二进制文件的读写需要用字节串(bytes) 进行操作

常用的操作方法:
  F.read([字节数/字符数])
    对于文本文件, F.read()返回类型为字符串str
    对于二进制文件,F.read()返回类型为字节串bytes
  F.write()
    同上,对于二进制文件,写入的数据为字节串bytes或bytearray


  F.tell() 方法
    返回当前文件流的读写位置(从0开始,以字节为单位)


  F.seek方法
    作用:  设置文件的读写位置
    格式:  F.seek(偏移量, whence=相对位置)
    偏移量
      大于0代表向文件尾方向移动
      小于0代表向文件头方向移动
    相对位置
      0 代表从文件头开始偏移
      1 代表从当前位置开始偏移
      2 代表从文件尾开始偏移

 

汉字编码
问题:
  十个汉字占多少个字节?
  20个(GBK编码)
  30个(UTF-8编码)

国标编码
    GB18030(二字节或四字节编码, 27533个字)
    GBK(二字节编码 21003个字)
    GB2312(二字节编码 6763个字)  (Windows上常用)

国际标准:
    UNICODE <---> UTF-8
    (Linux / Mac OS X / IOS / Android常用)

    UTF-8 (8-bit Unicode Transformation Format)

python的编码(encode)字符串:
    'gb2312'
    'gbk'
    'gb18030'
    'utf-8'
    'ascii'


编码注释:
    在源文件中第一行或第二行写入如下内容为编码注释

    # -*- coding:gbk -*-
    # 设置源文件编码格式为:gbk
# -*- coding:utf-8 -*-
    # 设置源文件编码格式为:utf-8

作用:
    告诉解释执行器,当前的.py文件的编码格式是什么

 

 

 

 

 

posted on 2018-10-27 09:23  蓝天梦nice  阅读(231)  评论(0)    收藏  举报

导航