Day4:字符编码与文件处理

本文深入探讨Python中文件操作的基本流程与字符编码的应用。详细介绍了文件编辑器的工作原理、Python解释器如何执行py文件,并重点讲解了字符编码在文件处理中的作用。此外,还提供了避免文件乱码的方法及文件操作的实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.字符编码

一.了解字符编码的知识储备

1:文本编辑器存储文件的原理(nodepad++,pycharm,word)

打开编辑器就打开了启动了一个进程,是在内存中的,所以在编写的内容也都是存放在内存中的,断电后数据丢失。

因而需要保存到硬盘上,点击保存按钮,就从内存中把数据刷到了硬盘上。

在这一点上,我们编写一个py文件(没有执行),跟编写其他文件没有任何区别,都只是在编写一堆字符而已。

2.python解释器执行py文件的远离,例如python test.py

第一阶段:python解释器启动,此时就相当于启动了一个文本编辑器。

第二阶段:python解释器相当于文本编辑器,去打开test.py文件,从硬盘上将test.py的文件内容读入到内存中。

第三阶段:python解释器解释执行刚刚加载到内存中test.py的代码。

总结:

1.python解释器是解释执行文件内容的,因而python解释器具备毒py文件的功能,这一点与文本编辑器一样。

2.与文本编辑器不一样的地方在于,python解释器不仅可以读文件内容,还可以执行文件内容。

二.字符编码的使用

1.文本编辑器一锅端

 

2.文本编辑器pycharm

一gbk格式保存

 

以utf-8格式打开

总结:

无论是何种编辑器,要防止文件出现乱码(请一定注意,存放一段代码的文件也仅仅只是一个普通文件而已),此处指的是文件没有执行之前,我们打开文件是出现的乱码

核心法则就是:文件以什么编码保存的,就以什么编码方式打开。

3.程序的执行

python test.py   (我再强调一遍,执行test.py的第一步,一定是先将文件内容读入到内存中)

阶段一:启动python解释器

阶段二:python解释器此时就是一个文本编辑器,负责打开文件test.py,即从硬盘中读取test.py的内容到内存中。

阶段三:读取已经加载到内存的代码(unicode编码的二进制),然后执行,执行过程中可能会开辟新的内存空间,比如x='egon'。

内存的编码使用unicode,不代表内存中全都是unicode编码的二进制,

在程序执行之前,内存中确实都是unicode编码的二进制,比如从文件中读取了一行x="egon",其中的x,等号,引号,地位都一样,都是普通字符而已,都是以unicode编码的二进制形式存放与内存中的

但是程序在执行过程中,会申请内存(与程序代码所存在的内存是俩个空间),可以存放任意编码格式的数据,比如x="egon",会被python解释器识别为字符串,会申请内存空间来存放"hello",然后让x指向该内存地址,此时新申请的该内存地址保存也是unicode编码的egon,如果代码换成x="egon".encode('utf-8'),那么新申请的内存空间里存放的就是utf-8编码的字符串egon了

针对python3如下图

 

浏览网页的时候,服务器会把动态生成的Unicode内容转换为utf-8再传输到浏览器

如果服务端encode的编码格式是utf-8,客户端内存中收到的也是utf-8编码的二进制

二.文件处理

文件操作基本流程初探

f = open('chenli.txt') #打开文件
first_line = f.readline()
print('first line:',first_line) #读一行
print('我是分隔线'.center(50,'-'))
data = f.read()# 读取剩下的所有内容,文件大时不要用
print(data) #打印读取内容
 
f.close() #关闭文件

文件保存编码如下

 

此刻错误的打开方式

f=open('chenli.txt',encoding='utf-8')
f.read() 

文件的打开模式

1 文件句柄 = open('文件路径', '模式')

打开文件时,需要指定文件路径和以何等方式打开文件,打开后,即可获取该文件句柄,日后通过此文件句柄对该文件操作。

打开文件的模式有:

    • r ,只读模式【默认模式,文件必须存在,不存在则抛出异常】
    • w,只写模式【不可读;不存在则创建;存在则清空内容】
    • x, 只写模式【不可读;不存在则创建,存在则报错】
    • a, 追加模式【可读;   不存在则创建;存在则只追加内容】

"+" 表示可以同时读写某个文件

    • r+, 读写【可读,可写】
    • w+,写读【可读,可写】
    • x+ ,写读【可读,可写】
    • a+, 写读【可读,可写】

 "b"表示以字节的方式操作

    • rb  或 r+b
    • wb 或 w+b
    • xb 或 w+b
    • ab 或 a+b

 注:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型,不能指定编码

文件内光标移动

注意:read(3)代表读取3个字符,其余的文件内光标移动都是以字节为单位如seek,tell,read,truncate。

上下文管理

with open('a.txt','w') as f:
    pass
with open('a.txt','r') as read_f,open('b.txt','w') as write_f:
    data=read_f.read()
    write_f.write(data)

文件的修改

import os
with open('a.txt','r',encoding='utf-8') as read_f,\
        open('.a.txt.swap','w',encoding='utf-8') as write_f:
    for line in read_f:
        if line.startswith('hello'):
            line='哈哈哈\n'
        write_f.write(line)

os.remove('a.txt')
os.rename('.a.txt.swap','a.txt')

 

 

 

转载于:https://www.cnblogs.com/Vee-Wang/p/6992927.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值