字符编码的应用与文件操作

字符编码的实际应用

编码与解码

s1 = '仰天大笑出门去'
#编码
将人类能够看懂的字符 编码成计算机能够直接看懂的字符
print(s1.encode('gbk'))
>>>:b'\xd1\xf6\xcc\xec\xb4\xf3\xd0\xa6\xb3\xf6\xc3\xc5\xc8\xa5'
    '''
    字符串前面如果加了字母b表明该数据类型为bytes类型可以看成二进制
    '''
#解码
将计算机能够直接读懂的字符解码成人类能够读懂字符
res = s1.encode('gbk')
print(res.decode('gbk'))
>>>:仰天大笑出门去
print(res.decode('utf8'))  # 报错
# utf-8用三个十六进制来表示一个中文字符,gbk用二个十六进制来表示一个中文字符。
'''
基于网络传输数据 数据都必须时二进制格式,所有肯定涉及编码与解码
'''

# 乱码
编码与解码类型不同,会出现乱码
所以用什么进行变么就用什么进行解码,便不会出现乱码

#python解释器
python2解释器默认使用的时ASCII码,因此在python2中出现中文会报错。
#解决办法
1.添加文件头:coding:utf8或者   _*_ coding:utf8 _*_
2.在使用python2解释器环境下定义字符串,会在前面加上u
eg: s = u'仰天大笑'
    而在python3中,默认编码为utf8

文件操作

文件操作简介

#什么时文件
文件是操作系统为我们提供的操作存储空间的快捷方式
#代码操作文件的流程
1.打开文件、创建文件
2.编辑文件内容
3.保存文件内容
4.关闭文件

#基本语法结构
结构1:
	f1 = open()
    f1.close()
结构2:
	with open() as f:
        pass
# 1.使用关键字打开文件夹
open(r'a.txt')  #相对路径
open(r'D:\py\文档\a.txt')  #绝对路径
'''在路径前面加上r是为了防止特殊符号导致路径出错'''
res = open(r'a.txt','r', encoding = 'utf8') 
'''
open(文件路径,文件操作模式,文件的编码)
1.文件的路径是必须的
2.文件的操作模式和文件的编码可以不写,默认为rt和utf8
'''
res.read() #只读不写
res.write()  #只写不读
'''
open文件操作完之后要使用close关闭文件,但是经常会被遗忘
'''
# with上下文管理
with open(r'a.txt', 'r', encoding = 'uftf8') as f:
    pass
使用withopen 当执行完子代码后自动关闭文件

文件的读写模式

r read  只读模式
w write  只写模式
a append  只追加模式
# r模式
#当使用r模式时,如果文件不不存在将会直接报错
with open(r'a.txt', 'r', encoding = 'utf8') as f:
    pass 
 pass没有任何功能,只是让代码不报错,与 ... 功能一致,通常使用pass

路径存在,正常打开文件并等待内容读取
with open(r'a.txt', 'r', encoding = 'utf8') as f:
    print(f.read())  #一次性读取文件中的所有内容
    f.write('hello word')  #报错

    
# w模式
#使用w模式,文件不存在,将会自动一个文件  文件存在则清空文件内容
with open(r'a.txt', 'w', encoding = 'utf8') as f:
    f.write('hello 1\n')  #将内容写入文件
    f.write('hello 2\r')  #将内容写入文件 
    f.write('hello 3\r')  #将内容写入文件
    '''
    \n  \r  都是换行符号
    最早时,\r\n表示换行
    '''
# a模式
#路径不存在,自动创建文件,路径存在并不会清空文件
with open(r'a.txt', 'a', encoding = 'utf8') as f:
    f.write('hello world')  #将hello world 写入文件 
    print(f.read())  #报错,不能读

文件的操作模式

# t模式
文本模式 是默认模式
	r rt
	w wt
	a at
1.只能操作文本文件
2.必须指定encoding参数
3.读写都是以字符串为最小单位
# b模式
二进制模式,可以操作任意类型文件
rb,wb,ab,,,b不能省略
1.可以操作任意类型文件
2.不需要指指定encoding参数
3.读写都是以bytes为最小单位

文件内置放到

read() #一次性读取所有文件内容
	1.执行完之后光标在文件末尾,当再次读取时,没有内容
	2.当文件内容过大时,容易造成内存溢出
readline()  #一次只读取一行内容
readlines() #结果为一个列表,一行的内容,对应列表中的一个元素
readable() #判断是否可读
write() #写入文件内容(字符串、bytes类型都可以)
writelines() #将列表中的多个元素写入文件
writeable()  #判断文件是否可写
flush() #保存文件

文件拷贝

点击展开

path1 = input(r'请输入文件路径>>>:')
path2 = input(r'请输入复制后文件路径>>>:')
with open(rf'{path1}', 'r', encoding='utf8') as f:
    res = f.read()
with open(f'{path2}', 'w', encoding='utf8') as f1:
    f1.write(res)

用户登录

点击展开

while True:
    # 打印菜单界面
    print('**********菜单**********\n1.登录\n2.注册')
    # 获取用户选项
    choice = input('请进行功能选择>>>:').strip()
    if choice == '1':
        username = input('请输入用户名>>>:').strip()
        userpwd = input('请输入密码>>>:').strip()
        with open('userinfo.txt', 'r', encoding='utf8') as f:
            for i in f:
                if i.split('|')[0] == username and i.split('|')[1] == userpwd:
                    print('登录成功')
                else:
                    print('用户名或密码错误')
    if choice == '2':
        while True:
            account = input('请输入你要注册的账号:>>>').strip()
            pwd1 = input('请输入设置的密码>>>:').strip()
            pwd2 = input('请再次输入设置的密码>>>:').strip()
            if pwd1 == pwd2:
                break
            else:
                print('您两次输入的密码不一样')
        with open('userinfo.txt','r', encoding='utf8') as f1:
            for info in f1:
                if account in info:
                    print('用户名已存在')
            else:
                with open('userinfo.txt', 'a', encoding='utf8') as f2:
                    f2.write(f'{account}|{pwd1}')
posted @   名字只需六字  阅读(98)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示