CSIC_716_20191108【文件的操作,以及彻底解决编码问题的方案】
关于编码的问题:
在平时编写代码,涉及到打开文件时,常常遇到字符编码的报错,
通过总结,得出以下规律
如果在操作过程中涉及到调用文本文档,一定要在文本文档开头申明编码方式(# coding:XXXXX),否则python3解释器会默认为utf-8的编码方式,而常常在中文操作系统中默认生成的文本文档 是utf-8的格式,会出现报错。
上节讲到打开文件的编码方式有三种,r、w、a叫做纯净模式,
r+、w+、a+模式,在除了可读可写,其他特性与纯净模式一致。
打开文件的时候,光标永远在文档最开始的地方
f.seek(offset,whence)
offset:代表字节移动的个数(相对偏移度)
whence:指定光标从何处开始,有三个参数可选,0是从文档开头开始,1是从文档当前光标开始,2从文件末尾开始
当whence=1或2时,处理文件的一定要是b。
如果以rb模式打开,f.read(x),其中x表示移动的字节数
如果以rt模式打开,f.read(x),其中x表示移动的字符数
字节的光标移动,可以结合文件动态监控的程序理解
监听程序:
import time with open(r'point.txt', 'r', encoding='utf-8') as rf, \ open(r'jianting.txt', 'a', encoding='utf-8') as af: rf.seek(0, 2) while True: time.sleep(1) res = rf.read() if res: af.write(res) af.write('\n') print('正在写入') af.flush()
文件操作程序
import time modify_time = time.strftime('%Y-%m-%d %H:%M:%S') with open(r'point.txt', 'a', encoding='utf-8') as af: str1 = '神恶寇数据死地咚咚咚看到没' af.write(str1 + f'修改时间:{modify_time}')
文件的修改
文件的修改目前有两种方式,一种是将文件所有内容取出来,将需要改变的内容取出来修改,然后再以写模式写入原文件
另一种方式是通过代码新建一个文件,将原文件内容取出来,将内容修改后存入新文件,然后导入os包,调用os.remove方法删除原文件,调用os.rename方法将新文件重命名为老文件名。详见代码
''' 方法1 ''' with open(r'作业文档gbk.txt', mode='r', encoding='gbk')as rf1: res1 = rf1.read() with open(r'作业文档gbk.txt', mode='w', encoding='gbk')as wf1: new_contents = res1.replace('tank', 'DSB') wf1.write(new_contents) ''' 方法2 ''' import os with open(r'作业文档2gbk.txt',mode='r',encoding='gbk')as rf, \ open(r'作业文档2gbk_new.txt',mode='w', encoding='utf-8')as wf: res2 = rf.read().replace('tank', 'DSB') wf.write(res2) os.remove('作业文档2gbk.txt') os.rename('作业文档2gbk_new.txt', '作业文档2gbk.txt')