“”"
案例:假设你是一名教师,负责管理学生的成绩。你有一个名为 grades.txt 的文件,记录了所有学生的成绩。文件内容如下:
Alice,85
Bob,78
Charlie,92
David,88
Eve,76
你需要编写一个 Python 脚本,读取文件内容并计算出所有学生的平均成绩。
“”"
# 思路一
# stu_list = []
#
# with open('./data/grades.txt', 'r', encoding='utf-8') as stu_f:
# while True:
# str_stu = stu_f.readline().strip()
# if len(str_stu) <= 0:
# break
# stu_list.append(int(str_stu.split(',')[1]))
# print(f'学生的成绩为: {stu_list}')
# avg = sum(stu_list) // len(stu_list)
# print(f'学生的平均成绩为: {avg}')
# 思路二
stu_list = []
#第一种写法
# with open('./data/grades.txt', 'r', encoding='utf-8') as stu_f:
# stu_line = stu_f.readlines()
# score_list = [int(line.strip().split(',')[1]) for line in stu_line]
# avg = sum(score_list) // len(score_list)
# print(f'学生的平均成绩为{avg}')
#第二种写法
with open('./data/grades.txt') as stu_f:
score_list = [int(line.strip().split(',')[1]) for line in stu_f.readlines()]
print(f'学生的平均成绩为{sum(score_list)//len(score_list)}')
文件拷贝:
# 普通文本拷贝
import shutil
# with (open('./data/bill.txt', 'r', encoding='utf-8') as r_bill, open('./data/bill.txt.bat', 'w', encoding='utf-8') as w_bill):
# while True:
# # line = r_bill.readline()
# line = r_bill.read(1024)
# if len(line) <= 0:
# break
# w_bill.write(line)
# print('拷贝成功')
# with (open('./data/bill.txt','rb') as r_bill,open('./data/bill.txt.bat', 'wb') as w_bill):
# while True:
# line = r_bill.read(1024)
# if len(line) <= 0:
# break
# w_bill.write(line)
# print('拷贝完毕')
shutil.copyfile('./data/bill.txt','./data/bill.txt.bat')
“”"
异常介绍:
概述:
在Python中, 我们把程序出现的所有非正常情况统称为异常, 俗称叫: Bug.
异常的处理方式:
方式1: 我们不手动处理, 交由系统自动处理, 则: 系统会将异常信息, 出现的原因, 位置打印到控制台上, 并终止程序的执行.
方式2: 我们手动处理, 处理之后, 程序会继续往下运行.
这里的手动处理就是: try.except语句.
格式:
try:
里边写可能出问题的代码
except [Exception as e]: 这里的中括号表示 可选 的意思.
这里写的是出现问题后的解决方案
else:
try中内容无问题, 则执行这里.
finally:
无论程序是否出现异常, 都会执行这里.
执行流程:
有问题, 则执行: except 的内容
/
先执行try 无论try中是否有问题, 最终都会执行 finally
\ /
无问题, 则执行: else 的内容
“”"
try:
print(10//1)
print('正常语句体')
except Exception as e:
print(e)
else:
print('没异常我也能执行')
finally:
print('我无论如何执行')
try:
print(10//0)
print('正常语句体')
except Exception as e:
print(e)
else:
print('没异常我也能执行')
finally:
print('我无论如何执行')
“”"
名词解释:
编码: 把我们看得懂的, 转成我们看不懂的.
例如: 计算机存数据: ‘中’ -> 转成十进制, 例如: 10023 -> 转成二进制, 假设: 1011 -> 存储到计算机中
解码: 把我们看不懂的, 转成我们看懂的.
例如: 计算机读数据: 读取到二进制, 例如: 1011 -> 转成十进制, 例如: 10023 -> 查码表得到, 该数字对应的字符, 例如: ‘中’
常用的编码:
ASCII: 美国通用信息交换码表, 比较早的码表, 目前的大多数码表都兼容它, 它主要记录: 数字, 字母, 特殊符号 及其对应数字之间的关系.
gbk: 主要针对于国内系列, 1个中文占2个字节, 其它(数字, 字母, 特殊符号)都只占1个字节.
utf-8: 万国码, 统一码, 主要针对于国际系列, 1个中文占3个字节, 其它(数字, 字母, 特殊符号)都只占1个字节.
细节:
编解码不一致, 可能会发生乱码.
“”"
# 定义字符串
s1 = '你好'
# 2.演示把我们能看懂的转成我们看不懂的
print(s1.encode(encoding='utf-8')) # b'\xe4\xbd\xa0\xe5\xa5\xbd'
print(s1.encode(encoding='gbk')) # b'\xc4\xe3\xba\xc3'
# 3.演示默认代码
print(s1.encode()) # b'\xe4\xbd\xa0\xe5\xa5\xbd'
s2 = s1.encode(encoding='utf-8')
# 演示解码
print(s2.decode(encoding='utf-8'))
# 不能用gbk的解u8的 会乱码
“”"
文件介绍:
概述:
用来管理计算机数据的, 可以永久存储, 根据数据类型不同, 文件类型也不同,
例如: 文件文件, 音频, 视频…
操作步骤:
1. 打开文件.
2. 读, 写.
3. 关闭文件.
涉及到的API:
文件对象名 = open(‘文件的路径’, ‘模式’, ‘码表’)
文件对象名.read(n) # 一次性从文件中读取n个内容, 如果不写n, 则一次性读取所有.
文件对象名.readline() # 一次性从文件中读取一行.
文件对象名.readlines() # 一次性从文件中读取所有行, 每行封装成字符串, 然后整体放到列表中.
细节:
1. 传入文件路径时, 可以写绝对路径, 也可以写相对路径.
绝对路径: 固定的, 写死的路径, 以盘符开头.
相对路径: 默认是相对于当前项目的路径来讲的, 即: 你直接写 1.txt, 它对应的绝对路径时: 当前项目路径/1.txt
2. 关于路径的几个特殊写法:
./ 代表当前文件所在的路径.
…/ 代表当前文件所在的路径的 上一级路径.
“”"
print(os.getcwd()) # current work directory, 当前的工作路径.
# 相对路径
# src_f = open('data/1.txt', 'r')
src_f = open('./data/1.txt', 'r')
# 2. 读取文件数据, 并将读取到的数据打印到控制台上.
# 场景1: 一次性读取文件中所有的文件
data = src_f.read()
print(data)
# 3. 释放资源.
src_f.close()
“”"
with open语句介绍:
概述:
它是用来简化文件操作的, 让我们不必再手动释放 文件资源了, 当程序结束的时候, 会自动释放.
本质:
with open语法本质上要结合 上下文管理器对象一起使用.
格式:
with open(‘文件路径’, ‘模式’, ‘码表’) as 文件对象名:
正常的读, 写操作即可
特点:
with语句, 会在它内部的代码执行完毕后, 自动释放资源.
“”"
with open('./data/2.txt', 'r', encoding='utf-8') as src_f:
# 读
data = src_f.read()
print(data)
“”"
文件的写入操作相关:
概述:
就是把数据写到文件中.
写入模式有两种:
w 覆盖写入, write
a 追加写入, append
无论上述哪种模式, 如果目的地文件不存在, 都会自动创建, 前提: 该文件的父目录必须存在.
例如: 要把数据写到: d:/aa/bb/cc/1.txt文件中, 1.txt文件可以不存在, 但是: d:/aa/bb/cc 必须存在.
写入数据的函数:
write(字符串) 把字符串写入到文件中.
writelines(容器类型) 一次性的把容器类型中的数据写到文件中.
“”"
dest_f = open('./data/3.txt', 'w', encoding='utf-8') # 目的地文件不存在, 会自动创建.
dest_f.writelines(['aa\n', 'bb\n', 'hi', '我好\n', '期待下次见面!'])
#一次写入指定的字符串.
# dest_f.write('hello world\n')
“”"
文件操作时的模式:
r: read, 只读
w: write, 覆盖写入
a: append, 追加写入
文件的操作步骤:
1. 打开文件.
2. 正常的读写操作.
3. 释放资源
“”"
# 1. 打开文件.
with open('./data/2.txt', 'a') as dest_f:
# 2. 往目的地文件中写数据.
dest_f.write('hello world!\n')
dest_f.write('hello python!\n')
# 3. 无需手动释放资源, 该内容结束后, with语句会自动释放.
需求: 假设你正在开发一个简单的注册系统,用户可以输入自己的基本信息(如用户名、密码、邮箱等),
系统会将这些信息保存到一个文件中,名为 user_reg.txt。
# 1. 提示用户录入他/她的信息, 并接收.
uname = input('请录入您的账号:')
pwd = input('请录入您的密码:')
email = input('请录入您的邮箱:')
# print(uname, pwd, email)
# 2. 打开目的地文件.
# with open('./data/user_reg.txt', 'a', encoding='utf-8') as dest_f: # a -> 追加写入
with open('./data/user_reg.txt', 'w', encoding='utf-8') as dest_f: # w -> 覆盖写入
# 3. 把上述的数据写到目的地文件中.
dest_f.write(f'账号:{uname}\n')
dest_f.write(f'密码:{pwd}\n')
dest_f.write(f'邮箱:{email}\n')
# 4. 提示即可.
标签:文件,txt,第十天,encoding,Python,data,print,分享,open
From: https://blog.csdn.net/weixin_45423893/article/details/144041816