字符编码的实际应用和文件常见操作

字符编码的实际应用

1.编码与解码

编码
将人类能够读懂的字符编码成计算机能够直接读懂的字符
解码
将计算机能够直接读懂的字符解码成人类能够读懂的字符

图片名称
s1 = '静以修身,俭以养德,非淡泊无以明志,非宁静无以致远'
print(s1.encode('gbk'))  # 用'gbk'编码转化为bytes类型
res = b'\xbe\xb2\xd2\xd4\xd0\xde\xc9\xed\xa3\xac\xbc\xf3\xd2\xd4\xd1\xf8\xb5\xc2\xa3\xac\xb7\xc7\xb5\xad\xb2\xb4\xce\xde\xd2\xd4\xc3\xf7\xd6\xbe\xa3\xac\xb7\xc7\xc4\xfe\xbe\xb2\xce\xde\xd2\xd4\xd6\xc2\xd4\xb6'
print(res.decode('gbk'))  # 用'gbk'解码转化为字符串

2.如何解决乱码的问题

数据编码时用的什么编码就用什么编码解

s1 = '静以修身,俭以养德,非淡泊无以明志,非宁静无以致远'
res1 = s1.encode('gbk')
print(res1)  # 编码
# res2 = res1.decode('euc-jp')
# print(res2)  # 乱码
res3 = res1.decode('gbk')
print(res3)  # 静以修身,俭以养德,非淡泊无以明志,非宁静无以致远

3.python解释器层面

python2解释器默认的编码是ASCII码
python3解释器默认的编码是utf8
1.文件头: 必须写在文件的最上方
指定解释器使用的编码

# coding:utf8
# -*- coding:utf8 -*-  # 美化写法

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

name = u'静以修身,俭以养德,非淡泊无以明志,非宁静无以致远'
图片名称

文件

文件操作简介

什么是文件

操作系统提供给用户可以直接操作硬盘的快捷方式

代码操作文件的流程

  1. 打开文件、创建文件
  2. 编辑文件内容
  3. 保存文件内容
  4. 关闭文件

基本语法结构

结构1(了解):

f1 = open()
f1.close()

结构2(推荐使用):

with open() as f:
    pass
# 使用关键字打开文件,填写路径为了防止特殊符号,可以在前面加r
# open(r'a.txt')  # 相对路径
# open(r'D:\python\day09\a.txt')  # 绝对路径
# res = open(r'a.txt', 'r', encoding='utf8')
"""
open(文件的路径,文件的操作模式,文件的编码)
    1.文件的路径是必填
    2.文件的操作模式、文件的编码有时候不用填
"""
# print(res.read())  # 读取文件内容
# res.close()  # 关闭文件
# 上述操作open操作后都需要执行close这一行很容易被遗忘的代码

# with上下文管理
with open(r'a.txt', 'r', encoding='utf8') as f:  # 相当于f = open()
    f2 = f.read()
print(f2)

文件的读写模式

r
只读模式: 只能读取不能写入
w
只写模式: 只能写入不能读取
a
只追加模式: 在文件末尾添加内容

r模式

# r模式
# 路径不存在:直接报错
# with open(r'userinfo.txt', 'r', encoding='utf8') as f1:
    # pass  (推荐)补全语法结构,本身没有任何功能
    # ...  (不推荐,容易眼花)补全语法结构,本身没有任何功能
# 路径存在:正常打开文件并读取内容
with open(r'userinfo.txt', 'r', encoding='utf8') as f1:
    print(f1.read())  # 一次性读取文件内所有的内容
    # f1.write('生于忧患,死于安乐')  # 报错

w模式

# 路径不存在:自动创建文件
with open(r'userinfo.txt', 'w', encoding='utf8') as f1:
    pass  # (推荐)补全语法结构,本身没有任何功能
    ...  # (不推荐)补全语法结构,本身没有任何功能
# 路径存在:先清空文件内容,之后再写入数据
with open(r'userinfo.txt', 'w', encoding='utf8') as f1:
    f1.write('尺有所短;寸有所长。物有所不足;智有所不明1\n')  # 写入文件内容
    f1.write('尺有所短;寸有所长。物有所不足;智有所不明2\n')  # 写入文件内容
    f1.write('尺有所短;寸有所长。物有所不足;智有所不明3\n')  # 写入文件内容
    # print(f1.read())  # 报错

a模式

# 路径不存在:自动创建文件
with open(r'txt1.txt', 'a', encoding='utf8') as f1:
    pass
# 路径存在:不会清空文件内容 而是在文件末尾添加新内容
with open(r'userinfo.txt', 'a', encoding='utf8') as f1:
    f1.write('^^^^^^^^^o^^^^^^^^^')
    # print(f1.read())  # 报错

文件的操作模式

t模式
文本模式,是默认的模式
r rt
w wt
a at
1.
该模式只能操作文本文件
2.
该模式必须要指定encoding参数
3.
该模式读写都是以字符串为最小单位

b模式
二进制模式,可以操作任意类型的文件
rb
不能省略b
wb
不能省略b
ab
不能省略b
1.
该模式可以操作任意类型的文件
2.
该模式不需要指定encoding参数
3.
该模式读写都是以bytes类型为最小单位

文件内置方法

read()  # 一次性读取文件内容
'''
1.执行完之后光标在文件末尾,继续用read()读取没有内容
2.当文件内容特别大的时候,容易造成内存溢出
'''
readline()  # 一次只读一行内容
readlines()  # 结果是一个列表,里面的各个元素是文件的多行内容
readable()  # 判断当前文件是否可读
支持for循环  # 一行行读取文件内容(推荐使用),内存中同一时刻只会有一行内容
write()  # 写入文件内容(字符串或者bytes类型)
writelines()  # 可以将列表中多个元素写入文件
writable()  # 判断文件是否可写
flush()  # 相当于按ctrl+s(保存)
图片名称
posted @ 2022-03-14 19:04  一梦便是数千载  阅读(132)  评论(0编辑  收藏  举报