python第一章(上)
python第一章(下)
python第二章
python第三章(上)
python第三章(下)
python第四章(上)
python第四章(下)
python第五章
文件与异常
- python系列
- 前言
- 文件及文件基本操作
- 文件简介
- 目录与文件路径
- 目录与文件
- 路径
- 绝对路径
- 相对路径
- 操作
- 打开文件
- 关闭文件
- 写文件
- write
- writelines方法
- 读文件
- read
- readline
- readlines
- 练习
- CSV文件操作
- 简介
- 特征
- 操作
- 读操作
- 写文件
- writerow
- writerows
- 练习
- 异常和异常处理
- 简介
- 处理
前言
- 文件及文件基本操作
- CSV文件操作
- 异常和异常处理
文件及文件基本操作 文件简介
- 文件,是一组相关数据的集合。组成文件的数据可以是ASCII编码,也可以是二进制编码。
- 文件名都包含两个部分:主文件名和扩展名,两者之间用“.”隔开。
- 文件——用来组织和管理一组相关数据的;
- 目录——是用来组织和管理一组相关文件的。
- 目录,又可称为文件夹,可以包含文件,也可以包含其他目录
- F盘根目录下包含:
文件夹“documents”和 文件“文件与异常处理.doc” - 文件夹“documents”下包含:
文件夹“python”、文件“scores.xlsx
和文件“data.txt” - 文件夹“python”下包含:
文件“5-1.py”
- 文件保存的位置被称为路径。
- 从文件所在驱动器名字(又称为“盘符”)开始描述文件的保存位置。
- 分隔符()
F:documentspython5-1.py - 路径字符串
“F:\documents\python\5-1.py” - 简便的路径字符串
r “ F:documentspython5-1.py ”
- 从当前工作目录开始描述文件的保存位置。
- 文件与异常处理的相对路径
“…\文件与异常处理.doc” - data的相对路径
“…\python\data.doc”
-
文件的操作一般包含三个步骤:
-
打开文件 ➡ 读文件或者写文件 ➡ 关闭文件
打开文件:将文件从外部存储器调入内存的过程File对象名 = open(文件路径字符串,模式字符)
-
文件路径字符串:可以采用绝对路径,也可以采用相对路径
-
模式字符:指定打开文件的类型和操作文件的方式
模式字符包括两个部分:打开模式和文件类型 -
打开模式:
r——读模式(默认)
w——覆盖写模式
a——追加写模式
+——扩展模式:在读模式基础上增加写功能,或者在写模式基础上增加读功能 -
文件类型:
t——文本文件(默认),例如txt文件、Python源代码等文件
b——二进制文件,例如Office文档、图片、声音、视频等文件
File对象名 = open(文件路径字符串,模式字符)关闭文件
-
将文件从从内存保存回外存的过程。
File对象名 .close()
- 打开文件后进行写入时,是将写入的东西放在缓存里,关闭文件则就将缓存的东西存入文件,所以有打开文件一定有关闭文件
- 首先要导入os
import os
import os print(os.getcwd())
- 显示默认的当前工作目录
- 运行截图
import os
os.chdir('F:\code\编程\py\学习代码\savetext')
print(os.getcwd())
- 修改当前默认工作目录
- 运行截图
import os
os.chdir('F:\code\编程\py\学习代码\savetext')
file=open("mydata.txt",'w')
- 用写模式打开不存在的文件可以在指定文件夹新建一个新文件
- 运行结果
- 文件与文件对象file关联,
- 后续文件操作通过文件对象实现
- 用文件对象的write方法写文件。
-
具体的格式:
文件对象.write(写入字符串)
-
将指定的字符串写入文件当前插入点位置
import os
os.chdir('F:\code\编程\py\学习代码\savetext')
file=open("mydata.txt",'w')
file.write("人之初,性本善。")
print(file.write("人之初,性本善。"))
- 可以打印出写入的字符数
- 运行结果截图
import os
os.chdir('F:\code\编程\py\学习代码\savetext')
file=open("mydata.txt",'w')
file.write("人之初,性本善。")
file.write("性相近,习相远。")
file.close()
- 连续写入的两个字符串之间没有分隔
- 运行结果截图
-
以序列的形式接受多个字符串作为参数,一次性写入多个串
-
具体格式
文件对象.write(字符串序列)
import os
os.chdir('F:\code\编程\py\学习代码\savetext')
file=open("mydata.txt",'w')
ls=["飞雪连天射白鹿","笑书神侠倚碧鸳"]
file.writelines(ls)
file.writelines(["横批:越女剑"])
file.close()
- 连续写入的两个字符串之间没有分隔
- 运行结果截图
import os
os.chdir('F:\code\编程\py\学习代码\savetext')
file=open("mydata.txt",'w')
ls=["飞雪连天射白鹿t","笑书神侠倚碧鸳n"]
file.writelines(ls)
file.writelines(["横批:越女剑"])
file.close()
- 可以手动加分隔符在字符串结尾处
- 运行结果截图
- 值得注意的是每次打开写入关闭之后,再次打开写入的时候会覆盖,可以用追加模式在文档后接着写('a’或者’a+’)
import os
os.chdir('F:\code\编程\py\学习代码\savetext')
file=open("mydata.txt", 'a')
file.write("笑书神侠倚碧鸳")
file.close()
- 运行结果截图
具体的格式:
字符串变量 = 文件对象.read()
- 读出文件所有内容并作为一个字符串返回(分隔符也会读出)
import os
os.chdir('F:\code\编程\py\学习代码\savetext')
file = open("mydata.txt",'r')
text = file.read()
print(text)
file.close()
- 运行结果截图
-
具体的格式:
字符串变量 = 文件对象.readline()
-
读出文件中当前行,并以字符串的形式返回
import os
os.chdir('F:\code\编程\py\学习代码\savetext')
file = open("mydata.txt",'r')
text = file.readline()
print(text)
text = file.readline()
print(text)
file.close()
- 每次读一行
- 运行结果截图
-
具体的格式:
字符串变量 = 文件对象.readlines()
-
读出文件所有内容并作为一个列表返回
import os
os.chdir('F:\code\编程\py\学习代码\savetext')
file = open("mydata.txt",'r')
text = file.readlines()
print(text)
file.close()
- 分隔符也会显示,一行为列表的一个元素
- 运行结果截图
- 问卷调查结果用文本文件“result.txt”保存。编写程序读文件然后统计各评语出现的次数,并将最终统计结果追加至“result.txt”文件中
- 直接创建result文本,在里面写入调查问卷的结果
import os
os.chdir('F:\code\编程\py\学习代码\savetext')
#编写读文件函数,返回字符串。
def readFile(fileName):
file = open(fileName,'r')
res = file.read()
return res
#统计各评语出现的次数,结果放在字典里。
def countComments(result):
resList = result.split(',')
commentCnts = {}
for res in resList:
commentCnts[res] = commentCnts.get(res, 0) + 1
return commentCnts
#调用读文件函数和统计函数,并将结果追加至result文件中,如图。
result = readFile("result.txt")
dicCnts = countComments(result)
file = open("result.txt",'a')
most=max(dicCnts.values())
for k,v in dicCnts.items():
if v == most:
mostComment = k
break
file.write("根据统计,对今天伙食感觉:n")
file.write("'很满意'的学生{}人;n".format(dicCnts["很满意"]))
file.write("'满意'的学生{}人;n".format(dicCnts["满意"]))
file.write("'一般'的学生{}人;n".format(dicCnts["一般"]))
file.write("'不满意'的学生{}人。n".format(dicCnts["不满意"]))
file.write("出现次数最多的评语是{}n".format(mostComment))
file.close()
- 运行结果截图
- CSV,是英文Comma-Separated Values的缩写,翻译为“逗号分隔值”。CSV文件可以理解为以带逗号分隔(也可以是其他简单字符分割)的纯文本形式存储表格数据的文件。
- 可以用记事本打开也可以用Excel打开
- 纯文本,使用某个字符集,比如ASCII、Unicode、EBCDIC或GB2312;
- 由记录组成,一行对应一条记录,每行开头不留空格;
- 每条记录被英文半角分隔符(可以使逗号、分号、制表符等)分割为字段;
- 每条记录都有同样的字段序列;
- 如果文件包含字段名,字段名写在文件第一行;
- 不包含特殊字符,文件中均为字符串。
- 针对CSV文件,Python提供了内置同名模块csv进行读写操作,读操作使用模块中的reader对象,写操作使用模块中的writer对象。
- CSV文件进行读、写操作前也需要先打开文件。
import csv
with open(文件名,读写模式) as file对象名:
#读写操作
- 用with子句打开的文件,当文件读操作结束后,系统自动调用close方法关闭文件。
- 创建csv文件存入以下信息
import csv
with open("F:\code\编程\py\学习代码\savetext\stu.csv",'r') as stucsv:
reader = csv.reader(stucsv)
for row in reader:
print(row)
- 使用csv模块读取CSV文件数据
先创建一个reader对象。
然后通过迭代遍历reader对象读出文件中的每一行 - 运行截图
import csv
with open("F:\code\编程\py\学习代码\savetext\stu.csv",'a') as stucsv:
writer=csv.writer(stucsv)
writer.writerow(['张芳','女','20'])
writer.writerow(['王虎','男','18'])
- 使用csv模块写CSV文件时
使用writer对象的writerow方法按行写入。
写入文件的一行内容要用列表存储 - 运行结果截图
- 记录之间出现了空行,读文件的时候可能会出错
import csv
with open("F:\code\编程\py\学习代码\savetext\stu.csv",'a',newline='') as stucsv:
writer=csv.writer(stucsv)
writer.writerow(['张芳','女','20'])
writer.writerow(['王虎','男','18'])
- 打开文件时增加一个参数“newline=‘’”,指明在写入新的记录后不插入空行
- 运行结果截图
- writerows方法只接受一个序列作为参数,可以是列表,也可以是元组
import csv
with open("F:\code\编程\py\学习代码\savetext\stu.csv",'a',newline='') as stucsv:
writer=csv.writer(stucsv)
writer.writerows([['刘伟','男','30'],['小虎','女','68']])
- csv模块也可以使用writerows方法依次写入多行:
将要写入文件的每一行存储在一个列表中
将每一个列表依次作为元素组成一个新序列
将带有嵌套列表元素的序列作为参数使用writerows方法 - 运行结果截图
- 生成的通信录字典创建“通信录.csv”文件;然后在程序中查询大王的手机号、QQ号和微信号。
import csv
with open("F:\code\编程\py\学习代码\savetext\stu.csv",'r') as txlcsv:
reader = csv.reader(txlcsv)
for row in reader:
if row[0]=='大王':
res=row
break
print("大王的手机号是:",res[1])
print("大王的QQ号是:",res[2])
print("大王的微信号是:",res[3])
- 运行截图
| 异常名称 | 描述 |
|---|---|
| Exception | 常规异常的基类 |
| ZeroDivisionError | 除数为零 |
| IOError | 输入/输出操作失败 |
| IndexError | 序列中没有此索引 |
| KeyError | 映射中没有这个健 |
| NameError | 未声明/初始化对象(没有属性) |
- 影响了程序的正常执行 导致程序非正常终止
-
try子句专门用来进行异常的捕捉与处理:
try: 语句 except 异常名称: 捕获异常时处理 else: 未发生异常时处理
-
程序执行时
如果try子句中发生了指定的异常,则执行except子句部分进行异常的处理;
如果try子句执行未发生异常则执行else子句部分。
try:
a = int(input("a="))
b = int(input("b="))
c = a / b
except ZeroDivisionError:
print("除数不能为0!")
else:
print("c=", c)
- 运行截图
- 读取并输出某盘下data2.txt文件内容,如果文件不存在则提醒用户先创建文件。
(题目要求读出 文件内容,需要用读模式打开,但是如果文件不存在系统会报错,所以需要进行IOError异常的捕获和处理。)
try:
file = open("F:\code\编程\py\学习代码\savetext\data2.txt", 'r')
except IOError:
print("data2.txt文件不存在,请先创建!")
else:
text = file.read()
print("data2.txt内容:n", text)
file.close()
- 运行截图



