1、掌握外部文件读取和存储各类方法。
2、掌握异常的处理办法。
3、掌握外部模块导入和调用的方法。
实际应用中,我们绝大数的数据都是通过文件的交互完成的。

1.文件的读写

1.1 文件的打开

  • 文件的打开通用格式

with open("文件路径","打开模式",encoding = "操作文件的字符编码") as f: # 对文件进行相应的读写操作

  • ①文件路径:程序与文件在同一文件夹,可简化成文件名
  • ②打开模式:
    - "r" 只读模式,如文件不存在,报错
    - "w" 覆盖写模式,若文件不存在,则创建;若文件存在,则完全覆盖原文件
    - "x" 创建写模式,若文件存在,则报错,若不存在则创建
    - "a" 追加写模式,若文件不存在,则创建,若存在则在原文件后追加内容
    - "b" 二进制文件模式,不能淡入使用,需要配合使用如"rb" "wb" "ab",该模式不需指定encoding
    - "t" 文本文件模式,默认值,需配合使用如"rt" "wt" "at"
    - "+" 与"r" "w" "x" "a"配合使用,在原功能基础上,增加读写功能
    - 打开模式缺省,默认为只读模式
  • ③字符编码:
    - utf-8:万国码,包含全世界所有国家需要用到的字符
    - gbk:中文编码,专门解决中文编码问题,Windows系统,如果缺省,则默认gbk(所在区域的编码),建议除处理二进制文件,建议不要缺省encoding使用with块的好处:执行完毕后,自动对文件进行close操作
with open("E:\ipthon\测试文件.txt","r",encoding="gbk") as f:  # 打开文件text = f. read()    # 读取文件print(text)

1.2 文件的读取

  • 读取整个内容——f.read()
  • 解码模式不匹配,报错
  • 逐行进行读取——f.readline()
  • 读入所有行,以每行为元素形成一个列表——f.readlines()
  • 图片是二进制文件注意:当文件比较大时,read()和readlines()占用内存过大,不建议使用,推荐使用如下方式
with open("三国演义片头曲_gbk.txt","r",enconding="gbk") as f:for text in f:                # f本身就是一个可迭代对象,每次迭代读取一行内容print(text)

1.3 文件的写入

  • 向文件写入一个字符串或字符流(二进制)——f.write()
  • 追加模式——"a"
  • 将一个元素为字符串的列表整体写入文件——f.writelines()
ls = ["春天刮着风", "秋天下着雨", "春风秋雨多少海誓山盟随风远去"]
with open("恋雨1980.txt", "w", encoding="utf-8") as f:f.writelines(ls)

1.4 既读又写

  • "r+":如果文件名不存在,则报错;文件指针在文件最开始,需要把指针移动到末尾才能开始写,否则会覆盖前面内容
with open("浪淘沙_北戴河.txt", "r+", encoding="utf-8") as f:
#    for line in f:
#        print(line)  #遍历文件f,指针达到结尾f.seek(0, 2) # 或者可以将指针移到末尾f.seek(偏移字节数,位置(0:开始;1:当前位置;2:结尾))text = ["萧瑟秋风今又是,\n", "换了人间,\n"]f.writelines(text)
  • "w+":若文件不存在,则创建;若文件存在,会立刻清空原内容
with open("浪淘沙_北戴河.txt", "w+", encoding="utf-8") as f:text = ["萧瑟秋风今又是,\n", "换了人间,\n"] # 清空原内容f.writelines(text)f.seek(0, 0)  # 指针移到开始print(f.read())
  • "a+":若文件不存在,则创建;指针在末尾,添加新内容,不会清空原内容

2 数据的存储与读取

通用的数据格式,可以在不同语言中加载和存储,主要了解数据存储结构csv和json

2.1 csv格式

csv格式由逗号将数据分开的字符序列,可以由excel打开

  • 读取
with open("成绩.csv","r",encoding="gbk") as f:ls = []for line in f:ls.append(line.strip("\n").split(",")) #去掉每行的换行符,并用","进行分割返回列表
for res in ls:print(res)

  • 写入
ls = [["编号", "数学成绩", "语文成绩"], ['1', '100', '98'], ['3', '97', '95']]
with open("score.csv","w",encoding="gbk") as f:            # encoding="utf-8"中文出现乱码for row in ls:f.write(",".join(row)+"\n")      # 逐行写入.用逗号组合成字符串形式

也可借助csv模块完成上述操作

2.2 json格式

常用来存储字典格式

  • 写入——dump()
scores = {"Petter": {"math": 96, "pysics": 98},"Paul": {"math": 92, "pysics": 99},"Mary": {"math": 98, "pysics": 97}}
with open("score.json", "w", encoding="utf-8") as f:# indent:表示字符串换行+缩进 ensure_ascii=False 显示中文json.dump(scores, f, indent=4, ensure_ascii=False)
  • 读取——load()
with open("score.json", "r", encoding="utf-8") as f:scores = json.load(f)   # 加载整个对象for k, v in scores.item():print(k, v)

3 异常处理

3.1 常见异常的产生

  • 除0异常——ZeroDivisionError
  • 找不到可读文件——FileNotFoundError
  • 值错误——ValueError:传入一个调用者不期望的值,即使这个值的类型是正确的
  • 类型错误——TypeError:传入对象类型与要求不符
  • 索引错误——IndexError:下标超出序列边界
  • 其他常见的异常类型:NameError使用一个还未被赋予对象的变量KeyError试图访问字典里不存在的键

当异常发生的时候,如果不预先设定处理方法,程序就会中断

3.2 异常的处理

提高程序的稳定性和可靠行

try_except

如果try内代码块顺利执行,except不被触发;如果try内代码块发生错误,触发except执行except内代码块

  • 单分支
x = 10
y = 0
try:z = x/y
except ZeroDivisionError:print("0不可以被除")
  • 多分支
d = {"name": "大杰仔"}
try:d["age"]
except NameError:print("变量名不存在")
except IndexError:print("索引超出界限")
except KeyError:print("键不存在")
  • 万能异常 Exception(所有错误的老祖宗)
  • 捕获异常的值 as
ls = []
d = {"name": "大杰仔"}
try:y = xls[3]d["age"]
except Exception as e:print(e)
  • try_except_else:如果try模块执行,则else模块也会执行,也可将else看做try成功的额外奖赏
  • try_except_finally:不论try模块是否执行,finally都会被执行

4 模块

已经被封装好,无需自己再"造轮子",声明导入后拿来即用

4.1 广义模块分类

  • ①Python内置:时间库time;随机库random;容器数据类型collection;迭代器函数itertools
  • ②第三方库:数据分析numpy、pandas;数据可视化matplotlib;机器学习scikit-learn;深度学习Tensorflow
  • ③自定义文件:文件夹内有多个py文件,再加一个__init__.py文件(内容可为空)

4.2 模块的导入

  • 导入整个模块——import 模块名
    - 调用方式:模块名.函数名或类名
  • 从模块中导入类或函数——from 模块 import 类名或函数名
    - 调用方式:函数名或类名
  • 导入模块中所有的类和函数—— from 模块 import *

4.3 模块的查找路径

模块搜索查找顺序:

  • ①内存中已经加载的模块
  • ②内置模块:Python启动时,解释器会默认加载一些modules 存放在sys.modules(包含一个由当前载入(完整且成功导入)到解释器的模块组成的字典,模块名作为域,他们的位置作为值)中
import sys
print(len(sys.modules))
print("math" in sys.modules)
print("numpy" in sys.modules)
for k,v in list(sys.modules.items())[:5]:print(k, ":", v)
"""
875
True
True
sys : <module 'sys' (built-in)>
builtins : <module 'builtins' (built-in)>
_frozen_importlib : <module 'importlib._bootstrap' (frozen)>
_imp : <module '_imp' (built-in)>
_thread : <module '_thread' (built-in)>
"""
  • ③sys.path路径中包含的模块:sys.path的第一个路径是当前执行文件所在的文件夹;若需将不在该文件夹内的模块导入,需要将模块的路径添加到sys.path
import sys
sys.path.append("C:\\User\\ibm\\Desktop")    #注意是双斜杠
import fun3
fun3.f3()

04-Python之文件、异常和模块相关推荐

  1. python的文件操作、模块操作、os模块、time、datatime模块以及模块的制作

    Day12新手小白学python 第十二节 python的文件操作.模块操作.os模块.time.datatime模块以及模块的制作 目录 Day12新手小白学python 前言 一.文件打开关闭 二 ...

  2. jupyther_python基础系列 08 第八章 文件异常和模块

    第八章 文件异常和模块 文件的读写 文件的打开 文件的打开通用格式 "对文件进行相应的读写操作"``` 使用 with 执行完毕 自动进行close操作[例1] 一个见到那的文件读 ...

  3. 【Python】Python错误、异常和模块(长文系列第4篇)

    系列第四篇主要讲两方面,错误和异常以及模块.在编程时遇见错误信息在所难免,Python中会也有很多种错误信息,常见的两种就是语法错误和逻辑错误,逻辑错误的种类有很多,占据了异常中大部分位置,下面就开始 ...

  4. 牛逼!Python错误、异常和模块(长文系列第4篇)

    系列第四篇主要讲两方面,错误和异常以及模块.在编程时遇见错误信息在所难免,Python中会也有很多种错误信息,常见的两种就是语法错误和逻辑错误,逻辑错误的种类有很多,占据了异常中大部分位置,下面就开始 ...

  5. python fileinput_Python文件替代fileinput模块

    Python文件替代fileinput模块 一,文件替代:此时对文件中的内容不真实替代,跟sed 不加-i,并且在屏幕上会打印出来 import fileinput for line in filei ...

  6. python 类 文件读写与模块

    初始化类的属性 def __init__(self,name): #self不能省self.name=name 注意:在定义类方法时,self不能省 继承 class 子类名(父类名): class ...

  7. Python读文件异常

    文件的打开与关闭 在python,使用open函数,可以打开一个已经存在的文件,或者创建一个新文件 打开 open(文件路径,访问模式) f = open('test.txt', 'w') 访问模式: ...

  8. Python(28)-文件,os模块

    文件 1. 文件 2. 文件的基本操作 3. 读取文件open() 3.1 文件指针: 标记从哪一个位置开始读取数据. 3.2 文件的打开方式mode 3.3 文件按行读取 3.3.1 readlin ...

  9. python复制文件shutil_Python常用模块——文件复制模块shutil

    Python常用模块--文件复制模块shutil shutil模块 高级的文件.文件夹.压缩包处理模块 shutil.copyfileobj(fsrc, fdst) 将文件内容拷贝到另一个文件中 im ...

  10. python pprint 文件,使用pprint模块格式化数据

    Python的pprint模块中使用的格式化可以按照一种格式正确的显示数据, 这种格式即可被解析器解析, 又很易读. 输出保存在一个单行内, 但如果有必要, 在分割多行数据时也可使用缩进表示. imp ...

最新文章

  1. Mybatis-plus常用API全套教程,看完没有不懂的
  2. linux内核经常用到的 一个概念“原子操作“
  3. shell脚本操作mysql数据库,使用mysql的-e参数可以执行各种sql的(创建,删除,增,删,改、查)等各种操作
  4. golang 修改nginx配置文件_「系统架构」Nginx调优,不可错过的几点
  5. java 日期类代码_java 日期时间处理类
  6. Resharper 安装以及破解
  7. 从数据到模型:实现自动驾驶高效感知
  8. 网关在链路上什么意思_银行卡上的数字都什么意思
  9. 用c语言编写24点游戏,C语言解24点游戏程序
  10. 最简单的基于DirectShow的示例:视频播放器自定义版
  11. SqlServer发布订阅错误收集
  12. WebQQ协议 3.0
  13. 华为y220t android版本升级,华为 Y220T 刷机详细图文教程
  14. MATLAB —— 绘制频谱图
  15. 百度编辑器上传图片后转到七牛存储
  16. 【发布】哔哩哔哩bilibili替换旧版播放(稍后再看)
  17. oracle 12c omf,从参数取值瞅Oracle OMF特性
  18. AI+OCR赋能古彝文数字化—让经典重新跳动
  19. java下雪_java多线程编程实现下雪效果
  20. Windows版kali主题包

热门文章

  1. python实现Metropolis采样算法实例
  2. Docker结合.Net Core初步使用
  3. css中易错漏点汇总(待续。。。)
  4. 浅谈零样本网络表示学习 AAAI2018 TKDE2020
  5. CWE-129: Improper Validation of Array Index(数组索引验证不当)
  6. 任天旭的HTML笔记
  7. 项目练习:构建读写分离的数据库集群
  8. 【Youtobe trydjango】Django2.2教程和React实战系列八【渲染数据库数据与模板加载顺序探究】
  9. Linux操作系统之僵尸进程
  10. 洛谷P6566 观星 题解