13 模块、文件详解

模块

python中的模块就是一个个的python文件
模块:.py文件

程序构成:
1. 顶层文件
2. 各个模块

模块:module

模块的特点

  1. 模块的概念:可以将代码量比较大的程序,分割成多个,有组织、彼此独立但又能相互调用的代码片段,这些自我包含有组织的代码就是模块
  2. 模块在物理形式上,表现为:以.py结尾的文件
    1. 一个文件可以被看做是一个模块,一个模块也可以被看做是一个文件
    2. 文件名 = 模块名+后缀
    3. 每个模块都有自己的命名空间(作用域)
  3. Python可以利用导入的形式,完成模块之间的相互调用
    关键字:import
    通过导入的方式,将多个模块之间关联起来,构成庞大的项目体系
  4. 模块的特性
    1. 模块也是个对象
    2. 模块中的所有的类、变量、函数,都会成为模块对象的属性

模块的导入

  1. 包:package
    1. 包是一种目录结构
    2. 包也是对象
    init.py文件就是包对象的构造方法
    3. 创建包:
    1. 创建一个文件夹
    2. 在该文件夹下创建__init__.py文件(空文件)
    3. 包可以有子包,包结构是可以多层嵌套的:
    模块名:大包名.子包名.模块名—完整的模块名
    4. 包是模块不可或缺的一部分

导入的形式:
声明:当前文件中使用的属性或者模块,都来自于import指定的路径

  1. import 完整模块名
    1. 只要使用引入的模块,则必须加上所有的包路径
    2. 如果要使用模块中的属性,必须加上所有的包路径和模块名
    3. 只能导入到模块级别的数据
    4. 可以很大程度去避免重名
  2. import 完整模块名 as 别名
    1. 使用更加方便
    2. 注意模块中的其他属性,别名也不要冲突

小结:
如果导入多个模块:
1. 写多个import语句即可
2. 写一个import,用逗号隔开多个路径(完整路径)
3. 如果要起别名,需要分别起别名
3. from 完整的模块名 import 属性
1. 可以导入属性界别的数据
2. 注意模块中的其他属性,不要和被导入的属性名冲突
4. from 完整的模块名 import 属性 as 别名
1. 可以避免属性名冲突的问题

小结:
如果导入多个模块:
1. 写多个from…import…
如果导入多个属性
1. 在import后面直接用逗号隔开
2. 如果要起别名,要分开起别名

模块的作用

  1. 提高代码的可重用性
    1. 是封装的产物
    2. 流程会更加简化
  2. 提高了代码的可读性
  3. 减少代码的冗余

补充

  1. 模块中尽量不要直接书写逻辑代码
    逻辑代码:while,for,if,输入输出等
    逻辑代码会在模块被加载的时候自动执行,会影响用户的使用
  2. 模块中应该只包含:
    1. 函数
    2. 变量
    3. 测试(if name=‘main’)

_name_

  1. name:是一个属性,存储对象的名字
  2. 如果直接使用__name__:属于当前模块的属性
    相当于:模块.name
    如果在当前模块打印:结果为:main
    表示主流程就在当前模块
    如果被导入并打印__name__:完整的模块名
    表示被调用
    此时主流程在主动导入的模块中
  3. 常常用作于测试代码
    if name == ‘main’:

第三方库

  1. pypi社区:python官方的社区,里面包含了所有的python库
    https://pypi.python.org/pypi
  2. pip包管理工具
    a库
    安装:pip install a
    查看已经安装的库的列表:pip list
    卸载:pip uninstall a
  3. site-packages
    存储第三方模块
  4. 模块的分类:
    1. 自带模块:标准库:内置库
    2. 自定义模块:自己写的模块
    3. 第三方模块:除了标准库和自己定义的以外(pypi)

文件

计算机:硬件+软件
CPU:处理器,计算
主板:承载其他硬件
IO设备:显示屏、鼠标、键盘、麦克风、音响
内存:读写速度快。缺点:贵!一旦断电,数据清空
所有的程序都是运行在内存中的
硬盘:运行速度慢。大、便宜、可以持久化数据
机械硬盘:4500R 7200R 10000R 绿盘 蓝盘 紫盘 黑盘 金盘
1T
固态硬盘:速度快,体积小,贵
128G 256G 512G

  • 文件

PY dll xml md MP4 avi rmvb wmv mkv jep jepg gif png html cpp

  1. 文件是以计算机硬盘为载体存储在计算机上的信息集合
    文本、图片、视频、音频、PY
    文件通常都有扩展名:—用于指示文件的类型
    大部分情况有扩展名
    hosts文件没有扩展名
    自定义的文件流没有扩展名
  • 打开文件
  1. open(file, mode=‘r’, encoding=None)
    打开一个文件资源,返回一个IO流
    file:路径,如果要写文件名,当前文件必须和要读取的文件在同一目录下,建议使用绝对路径
    mode:打开文件的方式 默认是r:只读
    encoding:编码方式。
  • 常用模式

r:以只读的方式打开文件
rb:以二进制形式只读的打开文件
w:以只写的方式打开文件,如果该文件已经存在则覆盖旧文件
wb:同上二进制
a+:追加,以只写的方式打开文件,如果文件已经存在,则在旧文件上追加写,如果不存在则创建新文件
ab+:同上二进制

# @Time : 2021/8/31 14:53 
# @Author : XX
# @File : 文件.py 
# @Software: PyCharm
# o = open(r'E:\太原理工2018\代码\baizhi\tyut2018\day14\info.txt',
#          encoding='utf-8')

o = open(r'E:\太原理工2018\代码\baizhi\tyut2018\day14\info.txt',
         mode='w',
         )
# o.write('')
# o = open(r'E:\太原理工2018\代码\baizhi\tyut2018\day14\info2.txt',
#          mode='a+'
#          ,encoding='utf-8')
# o.write('是的!')
# 使用完毕后,记得释放资源
o.close()
  1. 字符流
    用于传输字符串(文本,一次性传输多个字符)
  2. 字节流
    用于传输二进制文件,一次只能传输一个字节,字节流可以传输任何文件
    字节流效率低
    图片、音乐、视频、
  3. 中文乱码:
    读写中文时,要保证读写的编码必须一致,如果不一致,会出现乱码
    解决:
    修改读写的编码方式
    英文不会出现乱码问题:
    ASCII码表—符号、英文,现有的所有编码方式,都兼容ASCII码表
  • 流对象的相关属性和方法
1. close()
	关闭流,释放资源
2. closed
	返回流的关闭状态。关闭:True,没关闭:False
3. mode
	返回当前流的打开方式
4. name
	返回文件的绝对路径
5. read(size)
	按照字符数读取,如果不设置size默认全部读出
6. readline()
	按照字符读取一行
7. readlines()
	将所有内容,按行读取,以列表形式进行返回
8. write(str)
	向流中写入一个字符串
9. writelines(iterable)
	通过一个序列向流中写入多个字符串
  • with open语句
with open(r'E:\太原理工2018\代码\baizhi\tyut2018\day14\info.txt',
          mode='r',
          encoding='utf-8'
          ) as r:
    print(r.read())
    print(r.closed)
print(r.closed)

可以帮助自动关闭流资源,不需要手动关闭
语法:
with open(文件路径,模式) as 变量:
	# 核心代码
  • 补充模块

  • os模块

操作系统模块
文件的相关操作,都和操作系统有关
让python可以和操作系统间接地进行沟通
import os
path = r'E:\太原理工2018\代码\baizhi\tyut2018\day14\OS模块\案例'
print(os.listdir(path))
# 创建一层目录
# os.mkdir(path+r'\a')
# 删除一个目录,修改pycharm的权限
# os.remove(path+r'\a')
# 递归的删除多层目录
# os.removedirs(path)
# 创建多级目录
# os.makedirs(path+r'\a\b\c\d\e')

你可能感兴趣的:(Python基础,python,pycharm,开发语言)