字符编码应用、文件操作和方法

2022.3.14笔记总结

bX0BF0.jpg

  • 字符编码的实际应用
  • 文件操作简介
  • 文件的读写模式
  • 文件的操作模式
  • 文件的操作方法
  • 文件内置方法

一、字符编码实际应用

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('指令错误,请重新输入!')

bXBYh6.jpg

posted @   马氵寿  阅读(180)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
展开