[文件、文件管理、with上下文管理、字符编码]

[文件、文件管理、with上下文管理、字符编码]

1、什么是文件?

文件是操作系统对用户/应用程序操作硬盘的一种虚拟的概念/接口

用户/应用程序

操作系统(文件)

计算机硬件(硬盘)

2、为何要用文件?

# 用户/应用程序可以通过文件将数据永久的保存到硬盘当中
# 即操作文件就是操作硬盘

# 用户/应用程序直接操作的是文件,对文件进行的所有操作都是对操作系统的调用,
# 然后再由操作系统将其转换成具体的硬盘操作

3、如何用文件: open()

#     1、应用程序打开文件,拿到一个文件对象/文件句柄
#       2、调用文件句柄下的读或者写操作
#         3、关闭文件,回收操作系统资源

#1. 打开文件,得到文件句柄并赋值给一个变量
f=open('a.txt','r',encoding='utf-8') #默认打开模式就为r

#2. 通过句柄对文件进行操作
data=f.read()

#3. 关闭文件
f.close()
文件句柄 = open('文件路径', '模式')

4、with控制文件读写内容的模式

 t和b不能单独使用,必须跟 r w a 连用
   控制文件读写内容的模式
#   t  文本 (默认模式)
#         1、读写都可以,都是以str(unicode)为单位的
#             2、文本文件
#             3、必须指定encoding = 'utf -8'
#   b  二进制/bytes

 控制文件读写操作的模式
   # r  只读模式  文件不存在时报错,当文件存在时文件指针调到最开始位置
   # w  只写模式   文件不存在时则创建,当文件存在时清空
   # a  只追加写模式  在文件不存在时创建,在文件存在时指针跳到末尾

r w a模式与t b的应用

# rt:只写模式,文件不存在则报错,文件存在读入
# with open(r'a.txt',mode='rt',encoding='utf-8') as f:
#     print(f.read())

# wt:文件不存在则创建,文件存在则清空,指针跳到末尾
# with open(r'a.txt',mode='wt',encoding='utf-8') as f:
#     f.write('我是你爹地')

# at:文件不存在则报错,文件存在指针跳到末尾
# with open(r'a.txt',mode='at',encoding='utf-8') as f:
#     f.write('我是你爸爸 滚\n')
# rb模式:
# with open(r'a.txt',mode='rb') as f:
#     res = f.read()
#     print(res.decode('utf-8'))  #解码操作指定utf-8

# wb模式:
# with open(r'a.txt',mode='wb') as f:
#     f.write('哈哈哈'.encode('utf-8'))  #写入指定编码格式

# ab模式:
# with open(r'a.txt',mode='ab')  as f:
#     f.write('啦啦啦\n'.encode('utf-8'))

f.flush 可以立刻把内容写入硬盘

操作文件的方法

[复制代码](javascript:void(0)😉

#掌握
f.read() #读取所有内容,光标移动到文件末尾
f.readline() #读取一行内容,光标移动到第二行首部
f.readlines() #读取每一行内容,存放于列表中

f.write('1111\n222\n') #针对文本模式的写,需要自己写换行符
f.write('1111\n222\n'.encode('utf-8')) #针对b模式的写,需要自己写换行符
f.writelines(['333\n','444\n']) #文件模式
f.writelines([bytes('333\n',encoding='utf-8'),'444\n'.encode('utf-8')]) #b模式

#了解
f.readable() #文件是否可读
f.writable() #文件是否可读
f.closed #文件是否关闭
f.encoding #如果文件打开模式为b,则没有该属性
f.flush() #立刻将文件内容从内存刷到硬盘
f.name

5、文件修改的两种方式

第一种方式

# with open('a.txt',mode='rt',encoding='utf-8') as f1:
#     res = f1.read()  #文件如果过大不建议用此方法
#     print(res)
#     data = res.replace('haha','baba')
# with open('a.txt',mode='wt',encoding='utf-8') as f2:
#     f2.write(data)

第二种方式

# import os  #调用功能引用文件
# with open('a.txt',mode='rt',encoding='utf-8') as f,\
#     open('.a.txt',mode='wt',encoding='utf-8') as f1:
#     for line in f:   # 循环依次读出内容
#         f1.write(line.replace('baba','aini'))  # 判断每一行需要修改的内容修改
# os.remove('a.txt')   #移除文件
# os.rename('.a.txt','a.txt')  #将新文件的名改成源文件名

一、什么是字符编码

#          编码:字符编码表
# 字符------------------->>>数字
#          解码: 字符编码表
# 字符<<<-------------------数字

 #这个过程实际就是一个字符如何对应一个特定数字的标准,这个标准称之为字符编码

二、字符编码表

# ASCII编码表:只认识英文字符
#         1英文字符对应8bit
#             8bit = 1Byte
#             1024Byte= 1kb
#             1024KB = 1MB
#             1024MB = 1GB
#             1024GB = 1TB

# GBK:支持英文字符和中文字符
#       1个 字符对应16bit-->>2Bytes

# shift — JIS: 支持英文字符和日文字符
# Euc-kr:  韩文字符
# unicode:兼容万国字符
#         与万国字符都有对应关系
# utf - 8 : unicode transform format-8

三、如何保证不乱码

#   1、首先保证存不乱码,如何保证?
#      存内存不用管,因为内存固定使用uncode格式
#      硬盘的编码格式改为UTF-8
#   2、如何保证取不乱
#       解码编码用的同一张编码表

#1、保证不乱码的核心法则就是,字符按照什么标准而编码的,就要按照什么标准解码,此处的标准指的就是字符编码

#2、在内存中写的所有字符,一视同仁,都是unicode编码,比如我们打开编辑器,输入一个“你”,我们并不能说“你”就是一个汉字,此时它仅仅只是一个符号,该符号可能很多国家都在使用,根据我们使用的输入法不同这个字的样式可能也不太一样。只有在我们往硬盘保存或者基于网络传输时,才能确定”你“到底是一个汉字,还是一个日本字,这就是unicode转换成其他编码格式的过程了
posted @ 2021-03-22 12:19  刘较瘦丫  阅读(17)  评论(0)    收藏  举报