3.24 字符编码与文件高级

本文详细介绍了字符编码,包括ASCII、GBK、Unicode、UTF-8等,并强调了保证不乱码的方法。同时,讨论了文件处理的高级部分,如文件的读写检查、读写操作、文件指针控制以及文件内容的修改。提供了两种文件修改的方式,一种是直接读取、修改、写回,另一种是使用临时文件进行替换。
摘要由CSDN通过智能技术生成

1.字符编码(******):

字符---------------》编码(参照字符编码表)-----------------》数字
字符---------------《解码(参照字符编码表)-----------------《数字

字符编码表:
	ASCII表:最早科学家使用8位二进制,只认识英文字符
		英文字符对应8bit             8bit=1Bytes      
	GBK:使用16位二进制,支持英文与中文字符
		1个字符对应16bit            16bit=2Bytes
	Shift-JIS:支持英文与日文字符
	EUC-KR:支持英文与韩文字符
	Unicode:支持万国字符
		常用的字符:一个字符对应两个字节
		历史使命:1、兼容万国字符。2、兼容老的字符编码表
	utf-8:把Unicode做了一个优化
		一个英文字符---》1Bytes
		一个中文字符---》3Bytes
						内存								硬盘
	万国字符------------》unicode格式的二进制数-----------》utf-8格式的二进制数
	中、英字符-------》unicode格式的二进制数------》gbk格式的二进制数
保证不乱码:
	1、首先得保证存不乱码
		内存不用管,内存固定使用unicode,存入硬盘的编码格式改为utf-8
	2、再保证取不乱
		编码与解码用的是同一张字符编码表
	Python3默认读文件为utf-8,python2默认为ASCII

2.文件处理的高级部分

2.1 文件处理的其他方法

with open('a.txt',mode='rt',encoding='utf-8') as f:
    print(f.readable()) #检查文件是否可读
    print(f.writable())  #检查文件是否可写
    
    line = f.readline() #文件读一行
    print(line)

    line = f.readline()
    print(line)

    lines = f.readlines()
    print(lines)


with open('a.txt',mode='wt',encoding='utf-8') as f:

    names =  ["egon","tom","lili"]
    for name in names:
        f.write(name)   #依次写入文件
    f.writelines(names)  #文件中写入一序列的字符串

    f.flush()   #刷新

2.2 控制文件指针移动

主动控制文件指针移动
			控制文件内指针移动的单位:只有t模式下的read(n)代表的是字符个数,除此之外全都是字节个数
			0模式:f.seek(3,0)--- 参照文件开头指针位置
(只有0模式可以在t下使用,0也可以在b模式 下使用)
			1模式:f.seek(3,1)---》参照文件当前指针位置
2模式:f.seek(3,2)---》参照文件末尾指针位置
1和2模式要在b下使用

2.3 文件修改的两种方式

方式一:
1、将文件内容一次性全部读入内存
2、在内存中将内容修改完毕
3、将新内容写回原文件

with open('b.txt',mode='rt',encoding='utf-8') as f1:
    data = f1.read()
    res=data.replace("egon",'EGON')
    
with open('b.txt', mode='wt', encoding='utf-8') as f2:
    f2.write(res)

方式二:
1、以读的方式打开源文件,以写的方式打开一个临时文件
2、从源文件中读出一行内容都内存中,修改完毕后再写入临时文件,循环往复直到读完原件
3、删除源文件,将临时文件改名为源文件名

import os

with open('b.txt',mode='rt',encoding='utf-8') as src_f,\
        open('.b.txt.swp',mode='wt',encoding='utf-8') as dst_f:
    for line in src_f:
        dst_f.write(line.replace('EGON','egon'))

os.remove('b.txt')
os.rename('.b.txt.swp','b.txt')

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值