文件:让程序能够处理大量数据
异常:Python创建的特殊对象,用于管理程序运行中的错误
模块json:保存用户数据,以免在程序停止运行后丢失
1. 从文件中读取数据
读取一个文件的内容,从新设置这些数据的格式,并将其写入文件,让浏览器能够显示这些内容
读取文件时,可以一次性读取所有内人,也可以逐步读取
1.1 读取整个文件
在桌面创建一个111.txt的文本文件
关键词with在不需要访问文件时将其关闭
用open函数打开111.txt文本,此时需要一个变量接收
os包:专门负责路径相关操作
如果文件在Python运行目录中可以免去指定路径
# 导入os包
import os
# 显示当前工作路径
os.getcwd()
# 设置新的工作路径
os.chdir('C:\\Users\\Administrator\\Desktop')
# open函数打开111.txt文本,并将其保存到a变量中
with open('111.txt') as a:
# 使用read()方法读取文件全部内容,并将其作为一个字符串保持到contents变量中
内容 = a.read()
print(内容) # 【显示所有内容】
要以任何方式使用文件,都得先打开文件,这样才能访问它
函数open()接收一个参数:要打开文件的名称(Python在当前执行的文件所在目录中查找指定文件,并返回一个表示文本的对象)
另外也可以调用close()关闭文件,但是如果程序存在bug,导致文件不能正常关闭,可能导致数据丢失
使用whit关键字,只管打开文件,并在需要时使用它,让Python去确定在合适的时候自动将其关闭
会看到输出的结果最末尾有一个空行,这是因为read()到达文件末尾时返回一个空字符串
使用rstrip()方法,剔除字符串末尾空白
with open('111.txt') as a:
内容 = a.read()
print(内容.rstrip())
1.2 文件路径
当要打开的文件不在当前程序所在目录下时,就需要提供文件路径
相对文件路径:文件与程序公用一个上级文件夹
with open("上级文件名\pi_digits.txt") as file_object:
绝对文件路径:将文件在计算机的精确位置给程序,因文件路径较长,需要一个变量来储存
a = 'E:\\TDRDIS Book\\编程\\python基础入门\\111.txt'
with open(a) as b:
内容 = b.read()
print(内容)
Windows在Python的
\也表示转义标记,为在Windows下万无一失,可在原始字符串的方式指定路径,即开通的引号前加上r
1.3 逐行读取
用for循环遍历每行,用于查找特定信息,或者修改文本
filename = 'C:\\Users\\Administrator\\Desktop\\111.txt'
with open(filename) as a:
for line in a:
print(line.rstrip())
1.4 文件各行存储到列表
文件在with代码块内存在到一个列表中,便于在with代码块外使用
方法readlines()从文件中逐行读取每一行,并存储到列表中
filename = 'C:\\Users\\Administrator\\Desktop\\111.txt'
with open(filename) as a:
lines = a.readlines()
# 遍历列表
for line in lines:
print(line.rstrip()) # 【每一列是一个列表的元素】
查看列表字符串长度
for line in lines:
# 打印每行长度
print(len(line)) # 【显示列表每个元素的长度】
# 去除空格的每行长度
print(len(line.strip()))
查看列表总字符串长度
# 创建一个变量,用于接收列表中所有元素的汇总
a = ''
for line in lines:
a += line.strip()
print(len(a))
Python将所有文本都解读为字符串,如果读取的数字,用函数int()将其转为整数,用函数float()将其转为浮点数
1.5 大型文件
如果文件包含很多位数,如π
filename = 'C:\\Users\\Administrator\\Desktop\\111.txt'
# 打开文件
with open(filename) as a:
# 将文件存储在列表中
lines = a.readlines()
a = ''
for line in lines:
a += line.strip()
# 打印前10位
print(a[:10]) # 3.14159265
1.6 在列表中查看特定内容
filename = 'C:\\Users\\Administrator\\Desktop\\111.txt'
with open(filename) as a:
lines = a.readlines()
a = ''
for line in lines:
a += line.strip()
# 提示用户输入特定内容
输入内容 = input('请输入目标内容: ')
# 检查内容是否在列表中
if 输入内容 in a:
print('目标在列表中')
else:
print('目标不在列表中')
2. 写入文件
将数据写入到文件中
2.1 写入空文件
open()提供2个实参,第一个是要打开的文件,第二个是以什么模式打开文件
读取模式r、写入模式w、附加模式a、读取和写入模式r+
如果省略模式实参,Python默认打开只读模式
filename = 'C:\\Users\\Administrator\\Desktop\\1111.txt'
# 以写入模式打开文本
with open(filename, 'w') as a:
# 写入字符串
a.write('新年快乐') # 【在桌面生成1111.txt文档,内容是‘新年快乐’】
写入模式
w,如果没有这个文件,函数open()将自动创建这个文本,如果已存在,Python将在返回文件对象当前文件,即原内容被当前写入内容覆盖
使用方法write()将字符串写入文件
Python只能读字符串,如果要写入数据值,必须先使用函数str()将其转为字符串
多行编辑:使用换行符\n换行
filename = 'C:\\Users\\Administrator\\Desktop\\1111.txt'
with open(filename, 'w') as a:
a.write('新年快乐\n')
a.write('恭喜发财\n')
2.2 附加到文件
给文件添加内容,而不覆盖原有的内容,可用添加模式a打开文件
在原有的基础上添加内容
filename = 'C:\\Users\\Administrator\\Desktop\\1111.txt'
# 以附加模式打开文件
with open(filename, 'a') as a:
a.write('红包拿来\n')
a.write('拿去不谢\n')
3. 异常
Python使用异常这一特殊对象来管理程序执行期间发生的错误
当Python不知所措的时候,会建立一个异常对象
编写了处理异常的代码,程序将继续运行;未对异常进行处理,程序将停止,并显示traceback
异常用try-except代码处理,其让Python执行指定代码,同时告诉Python发生异常该则么办
即使出现异常,程序也将继续运行:显示编写的友好的错误信息,而不是令人困惑的traceback\
3.1 ZeroDivisionError异常

在运行结果中,指出的错误ZeroDivisionError是一个异常对象
使用try-except代码块
try:
print(5/0)
except ZeroDivisionError:
print('您不能把0作为分母') # 您不能把0作为分母
try-except-else代码
创建一个只执行除法的运算器
print('请输入分子分母')
print('输入q表示退出')
while True:
分子 = input('请输入分子: ')
if 分子 == 'q':
break
分母 = input('请输入分母: ')
if 分母 == 'q':
break
try:
答案 = int(分子)/int(分母)
except ZeroDivisionError:
print('分母不能为0')
else:
print(答案)
仅在
try代码成功运执行时才需要运行的代码,放在else代码中
3.2 FlieNotFoundError异常
读取一个不存在的文件

try-except处理
filename = 'C:\\Users\\Administrator\\Desktop\\404.txt'
try:
with open(filename) as a:
内容 = a.readlines
print(内容)
except FileNotFoundError:
print('您找的' + filename + '不存在')
用函数把异常处理分离主代码
def 打开文件(文件名):
'''以只读模式打开一个文件'''
try:
with open(文件名) as a:
bs = a.readlines()
except FileNotFoundError:
print('您找的' + 文件名 + '不存在')
else:
return bs
filename = 'C:\\Users\\Administrator\\Desktop\\111.txt'
文件内容 = 打开文件(filename)
print(文件内容)
3.3 不显示错误信息
pass语句,让Python什么都不要做,不显示错误信息
def 打开文件(文件名):
'''以只读模式打开一个文件'''
try:
with open(文件名) as a:
bs = a.readlines()
except FileNotFoundError:
pass
else:
return bs
filename = 'C:\\Users\\Administrator\\Desktop\\404.txt'
文件内容 = 打开文件(filename)
print(文件内容) # None
Python能决定报告哪些错误:
Python的错误处理结构能够细致地控制与用户分享错误信息的程度
4. 数据存储
模块json可以将简单的Python数据结构储存到文件中,并可再次运行
4.1 json模块
函数json.dump()接收2个实参:要储存的数据(下列中a)、用于存储数据的文件对象(下列中b)
# 导入json模块
import json
# 创建一个数字列表
a = [2, 3, 3, 4, 5]
# 指明数字列表要储存的文件名(数列)、格式(json)和路径
filename = 'C:\\Users\\Administrator\\Desktop\\数列.json'
# 以写入合适打开文件,让json能够将数据写入其中,并将其保存到变量b中
with open(filename, 'w') as b:
# 使用json.hump()将列表(a)存储到文件(数列)中
# 列表存储到b中,b关联filename,filename规定了文件名和json格式
json.dump(a, b) # 桌面生成数列.json文件
json.load()读取json.dump()列表
import json
filename = 'C:\\Users\\Administrator\\Desktop\\数列.json'
with open(filename) as b:
# 使用函数json.load加载存储在数列.json中的信息
# json.load加载b,b关联filename,filename的路径是数列.json
c = json.load(b)
print(c) # [2, 3, 3, 4, 5]
4.2 input数据
存储用户名字
import json
姓名 = input('请输入您的姓名: ')
filename = 'C:\\Users\\Administrator\\Desktop\\姓名.json'
with open(filename, 'w') as a:
json.dump(姓名, a)
print('我将记住您的姓名')
向存储用户发问候
import json
filename = 'C:\\Users\\Administrator\\Desktop\\姓名.json'
with open(filename) as a:
姓名 = json.load(a)
print('欢迎再次回来' + 姓名)
4.3 重构
将代码划分为一系列完成具体工作的函数,这个过程叫重构
import json
def 问候():
'''
问候并指出其名字
如果没有相关文件,则创建一个
'''
姓名 = 'C:\\Users\\Administrator\\Desktop\\姓名.json'
try:
with open(姓名) as a:
b = json.load(a)
except FileNotFoundError:
c = inport('请输入您的姓名: ')
with open(姓名, 'w') as d:
json.dump(c, d)
print('我将记住您的姓名')
else:
print('欢迎回来' + b)
问候()
重构上述代码
import json
def 获取姓名():
'''如果储存了用户姓名,就获取他它'''
姓名 = 'C:\\Users\\Administrator\\Desktop\\姓名.json'
try:
with open(姓名) as a:
b = json.load(a)
except FileNotFoundError:
pass
else:
return b
def 问候():
'''问候用户,并指出其名'''
姓名 = 获取姓名()
# 如果成功获取用户名,进入if代码块
if 姓名:
print('欢迎回来' + 姓名)
else:
c = inport('请输入您的姓名: ')
姓名 = 'C:\\Users\\Administrator\\Desktop\\姓名.json'
with open(姓名, 'w') as d:
json.dump(c, d)
print('我将记住您的姓名')
问候()
继续向更简洁重构
import json
def 获取姓名():
'''如果储存了用户姓名,就获取他它'''
姓名 = 'C:\\Users\\Administrator\\Desktop\\姓名.json'
try:
with open(姓名) as a:
b = json.load(a)
except FileNotFoundError:
pass
else:
return b
def 输入姓名():
'''提示用户输入用户名'''
c = inport('请输入您的姓名: ')
姓名 = 'C:\\Users\\Administrator\\Desktop\\姓名.json'
with open(姓名, 'w') as d:
json.dump(c, d)
return c
def 问候():
'''问候用户,并指出其名'''
姓名 = 获取姓名()
# 如果成功获取用户名,进入if代码块
if 姓名:
print('欢迎回来' + 姓名)
else:
姓名 = 输入姓名()
print('我将记住您的姓名')
问候()
每个函数都执行单一而清晰的任务,只需要调用最后一个函数,让其打印一条合适的信息
目录
一、搭建编程环境
二、变量和简单数据类型
三、列表
四、if语句
五、字典
六、用户输入和while循环
七、函数
八、类
九、文件和异常
