字符编码应用、文件操作和方法
2022.3.14笔记总结
- 字符编码的实际应用
- 文件操作简介
- 文件的读写模式
- 文件的操作模式
- 文件的操作方法
- 文件内置方法
一、字符编码实际应用
1、编码与解码
编码:就是将人类能够读懂的内容编码成计算机能够读懂的语言
复制代码
- 1
- 2
- 3
str = '事已至此何不一搏'
str.encode('gbk') # 表示将这句话编码成gbk格式的二进制
注意:编码后的数据类型为bytes类型,可以看成是二进制
解码:就是将计算机能够读懂的字符解码成人类能够读懂的字符
复制代码
- 1
- 2
- 3
bytes = b'\xca\xc2\xd2\xd1\xd6\xc1\xb4\xcb \xba\xce\xb2\xbb\xd2\xbb\xb2\xab'
bytes.decode('gbk')) # 表示解码成gbk格式的数据
注意:网络传输都必须是二进制格式
2、如何解决乱码问题?
答:数据以什么编码编的就用什么编码解码即可,举例如下
复制代码
- 1
- 2
- 3
- 4
- 5
res = str.encode('gbk')
res2 = res.decode('ecu_kr')
print(res2) # 结果为乱码
res3 = res.decode('gbk')
print(res3) # 正常显示
3、python解释器层面
python2解释器默认的编码是ASCII码
1.文件头必须写在文件最上方,告诉解释器使用指定的编码
coding:utf8
复制代码
- 1
- 2
coding:utf8 # 写在文件最上方
-*- coding:utf8 -*- # 美化写法
2.字符前缀:在使用python2解释器的环境下定义字符串习惯在前面加u
复制代码
- 1
name = u'你好啊'
python3的解释器默认的编码是utf8
二、文件操作简介
1、什么是文件?
答:操作系统暴露给用户封装好的可以直接操作的快捷方式
2、代码操作文件的流程
(1)打开文件、创建文件
(2)编辑文件内容
(3)保存文件内容
(4)关闭文件
3、基本语法结构
结构1(了解即可)如下:
复制代码
- 1
- 2
f = open() # 打开文件
f.close() # 关闭文件
结构2(推荐使用)如下:
复制代码
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
with open() as f:
pass
注意:()内容有3个参数
1.路径(必写):
相对路径:r'a.txt'
绝对路径:r'D:\py1\day09\a.txt'
# 路径前加r是为了防止特殊符号,习惯加
2.'r'/'w'/'a' 读写模式
3.encoding='utf8' # 固定搭配,编码类型
eg:f = open(r'a.txt', r, encoding='utf8' )
上述结构2使用的是with上下文管理的语法结构:
复制代码
- 1
- 2
with open(r'a.txt', r, encoding='utf8' ) as f:
pass
三、文件的读写模式
r --> read 只读模式:只能读不能写
w --> write 只写模式:只能写不能读
a --> append 只追加模式:在文件末尾添加内容
1、r模式
复制代码
- 1
- 2
- 3
- 4
- 5
- 6
- 7
with open(r'a.txt', 'r', encoding='utf8') as f:
f.read()
注意(r模式下):
1.a.txt若存在则正常打开等待操作
2.a.txt若不存在则直接报错
f.read() # 一次性读取文件内所有内容
f.write('sth') # 报错,因为r模式下只能读
2、w模式
复制代码
- 1
- 2
- 3
- 4
- 5
with open(r'a.txt', 'w', encoding='utf8') as f:
f.write('sth')
注意(w模式下):
1.a.txt存在则清空文件所有内容,之后写入数据
2.a.txt若不存在则新建一个a.txt文件
3、a模式
复制代码
- 1
- 2
- 3
- 4
- 5
- 6
with open(r'a.txt', 'a', encoding='utf8') as f:
f.read()
f.write('sth')
注意(a模式下):
1.a.txt存在则在文件末尾添加新内容
2.a.txt不存在则新建一个a.txt文件
四、文件的操作模式
1、t模式
文本模式,r/w/a模式下默认是t模式,也可以写rt/wt/at
r --> rt 可以省略t
w --> wt 可以省略t
a --> at 可以省略t
(1)该模式下只能操作文本
(2)必须指定encoding参数
(3)t模式读写都是以字符串为最小单位
2、b模式
二进制模式,可以操作任意类型文件
rb 不可省略b
wb 不可省略b
ab 不可省略b
(1)b模式下可以操作任意类型文件
(2)b模式下不需要指定encoding参数
(3)b模式读写都是以bytes类型为最小单位
五、文件内置方法
1、读read
read():一次性读取文件所有内容
注意:
(1)read执行完光标是在文件结尾,再读取一次读不到内容
(2)当文件内容很大时,容易造成内存溢出
readline():一次读一行内容
readlines():一行一行读,读完之后组成一个列表,每个元素是每行内容
readable():判断当前文件是否可读
注意:文件也支持for循环!
2、写write
write():写入文件内容
writelines():可以将列表中的多个元素写入文件
复制代码
- 1
f.writelines([1, 2, 3, 4, 5]) # 12345写入f
writable():判断文件是否可写
flush():相当于按了ctrl+s保存
六、作业
复制代码
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
1.编写一个简易版本的拷贝程序
路径全部自定义
2.结合文件编写用户注册登录功能
# 提前先创建一个空的userinfo.txt
用户注册 数据保存到文件中
用户登录 数据来源于文件
1.必须给我写出来
单用户注册登录
2.拔高练习
多用户注册登录
3.整理今日内容及博客、录音等
复制代码
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
# # 作业1:编写一个简易拷贝程序
path = input('输入文件路径>>>:').strip()
with open(path, 'rb') as f:
c = f.read()
path2 = input('输入copy路径>>>:').strip()
with open(path2, 'wb') as f2:
print('copy成功!')
# 作业2:编写用户注册登录功能并使用文件存储数据
k = []
while True:
print(
'''
---------user system---------
1.注册
2.登录
----------the end------------
'''
)
choice = input('输入数字指令>>>:').strip()
if choice == '1':
username = input('输入注册用户名>>>:').strip()
if username in k:
print('用户名已存在')
continue
else:
k.append(username)
password = input('输入密码>>>:').strip()
with open('userinfo.txt', 'a', encoding='utf8') as f:
f.write(f'{username}|{password}\n')
print('注册成功')
continue
elif choice == '2':
# 获取用户账号密码
log_name = input('输入用户名登录>>>:')
log_pwd = input('输入密码>>>:')
log_info = log_name + '|' + log_pwd # 调整格式方便与文件比对
with open('userinfo.txt', 'r', encoding='utf8') as f:
for i in f: # for循环比对用户账号密码
if log_info == i.strip('\n'):
print('登录成功!')
break # 登录成功后结束for循环
else:
print('用户名或密码错误请重新输入!') # for循环未找到用户账号密码则提示
else:
print('指令错误,请重新输入!')
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步