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

2022.3.14笔记总结

bX0BF0.jpg

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

一、字符编码实际应用

1、编码与解码

编码:就是将人类能够读懂的内容编码成计算机能够读懂的语言

str = '事已至此何不一搏'
str.encode('gbk')  # 表示将这句话编码成gbk格式的二进制
注意:编码后的数据类型为bytes类型,可以看成是二进制

解码:就是将计算机能够读懂的字符解码成人类能够读懂的字符

bytes = b'\xca\xc2\xd2\xd1\xd6\xc1\xb4\xcb \xba\xce\xb2\xbb\xd2\xbb\xb2\xab'
bytes.decode('gbk'))  # 表示解码成gbk格式的数据
注意:网络传输都必须是二进制格式

2、如何解决乱码问题?

答:数据以什么编码编的就用什么编码解码即可,举例如下

res = str.encode('gbk')
res2 = res.decode('ecu_kr')
print(res2)  # 结果为乱码
res3 = res.decode('gbk')
print(res3)  # 正常显示

3、python解释器层面

python2解释器默认的编码是ASCII码

​ 1.文件头必须写在文件最上方,告诉解释器使用指定的编码

​ coding:utf8

	coding:utf8  # 写在文件最上方
-*- coding:utf8 -*-  # 美化写法

​ 2.字符前缀:在使用python2解释器的环境下定义字符串习惯在前面加u

name = u'你好啊'

python3的解释器默认的编码是utf8

二、文件操作简介

1、什么是文件?

答:操作系统暴露给用户封装好的可以直接操作的快捷方式

2、代码操作文件的流程

(1)打开文件、创建文件

(2)编辑文件内容

(3)保存文件内容

(4)关闭文件

3、基本语法结构

结构1(了解即可)如下:

f = open()  # 打开文件
f.close()  # 关闭文件

结构2(推荐使用)如下:

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上下文管理的语法结构:

with open(r'a.txt', r, encoding='utf8' ) as f:
    pass

三、文件的读写模式

r --> read 只读模式:只能读不能写

w --> write 只写模式:只能写不能读

a --> append 只追加模式:在文件末尾添加内容

1、r模式

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模式

with open(r'a.txt', 'w', encoding='utf8') as f:
    f.write('sth')
注意(w模式下):
	1.a.txt存在则清空文件所有内容,之后写入数据
    2.a.txt若不存在则新建一个a.txt文件

3、a模式

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():可以将列表中的多个元素写入文件

f.writelines([1, 2, 3, 4, 5])  # 12345写入f

writable():判断文件是否可写

flush():相当于按了ctrl+s保存

六、作业

1.编写一个简易版本的拷贝程序
	路径全部自定义
2.结合文件编写用户注册登录功能
	# 提前先创建一个空的userinfo.txt
	用户注册 数据保存到文件中
    用户登录 数据来源于文件
    1.必须给我写出来
    	单用户注册登录
    2.拔高练习
    	多用户注册登录
3.整理今日内容及博客、录音等
# # 作业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 @ 2022-03-14 20:03  马氵寿  阅读(203)  评论(0)    收藏  举报