关于编码的问题:

在平时编写代码,涉及到打开文件时,常常遇到字符编码的报错,

通过总结,得出以下规律

 如果在操作过程中涉及到调用文本文档,一定要在文本文档开头申明编码方式(# 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')

  

CSIC_716_20191108【文件的操作,以及彻底解决编码问题的方案】的更多相关文章

  1. 多线程协作 FileStream文件读写操作,读写冲突解决

    using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Tex ...

  2. Java文件读写操作指定编码方式防乱码

    读文件:BufferedReader 从字符输入流中读取文本,缓冲各个字符,从而提供字符.数组和行的高效读取. 可以指定缓冲区的大小,或者可使用默认的大小.大多数情况下,默认值就足够大了. 通常,Re ...

  3. day08文件操作的三步骤,基础的读,基础的写,with...open语法,文件的操作模式,文件的操作编码问题,文件的复制,游标操作

    复习 ''' 类型转换 1.数字类型:int() | bool() | float() 2.str与int:int('10') | int('-10') | int('0') | float('-.5 ...

  4. day4-基础 字符串操作,文件操作,字符转编码

    1.字符串用法 name = 'daniel' print(name.capitalize()) #首字母大写 >>>daniel print(name.count('a')) #统 ...

  5. python文件相关操作

    Python文件相关操作 打开文件 打开文件,采用open方法,会将文件的句柄返回,如下: f = open('test_file.txt','r',encoding='utf-8') 在上面的代码中 ...

  6. 记录我的 python 学习历程-Day08 文件的操作

    文件操作的初识 用 python 代码对文件进行各种操作. 基本构成: 文件路径:path 打开方式:读.写.追加.读写.写读-- 编码方式:utf-8 / gbk / gb2312-- f = op ...

  7. Qt文件读写操作

    原文地址:https://www.cnblogs.com/flowingwind/p/8336159.html QFile Class 1.read读文件 加载文件对象  QFile file(&qu ...

  8. QT5 文件读写操作

    QFile Class 1.read读文件 加载文件对象  QFile file("文件地址"); 打开加载的文件file.open(打开方式); 操作文件 关闭打开的文件file ...

  9. PHP 文件夹操作「复制、删除、查看大小」递归实现

    PHP虽然提供了 filesize.copy.unlink 等文件操作的函数,但是没有提供 dirsize.copydir.rmdirs 等文件夹操作的函数(rmdir也只能删除空目录).所以只能手动 ...

随机推荐

  1. HTML中列表中元素居中问题

    想让列表<table>中某一行元素居中的话,单纯使用<align  = 'center'>是达不到效果的,需要先将该行进行合并,使用colspan属性. <html> ...

  2. docker mysql 命令导入sql数据文件

    1.查看mysql容器 docker ps 比如我的是:94df84cbaaaa 2.复制sql文件到docker mysql里面的tmp文件夹 docker cp ./admin.sql 94df8 ...

  3. Apriori-关联规则挖掘算法

    Apriori算法采用的是自底向上的方法,从1-频繁集开始,逐步找出高阶频繁集. 它的基本流程是:第一次扫描交易数据库D时,产生1- 频繁集.在此基础上经过连接.修剪产生2-频繁集.以此类推,直到无法 ...

  4. 【HDOJ】 P2054 A == B ?

    题目意思不太多解释,具体WA的情况可以举出一下特例 0 +0 0.00 0 +1 -2 +1.00 -1.00 +.2 -.2 .0 .1 等等 不过可以发现对上面的数据处理,可以分为以下几步 1.找 ...

  5. ubuntu16.04安装python虚拟环境

    自己也是搜的教程,亲测有效 ubuntu16.04创建虚拟环境 一.linux环境 Ubuntu16.04 二.安装和配置虚拟环境 安装虚拟环境 sudo pip install virtualenv ...

  6. Vue下渐变效果有时候失效

    记录一个问题:我在项目中给按钮设置一个渐变属性,调试的时候有时候有效果,有时候又没有,代码如下: .training-right-bmz { background: -webkit-linear-gr ...

  7. uuencode - 对二进制文件编码

    总览 (SYNOPSIS) uuencode [-m] [ file ] name uudecode [-o outfile] [ file ]... 描述 (DESCRIPTION) Uuencod ...

  8. python异常整理

    一.操作excel 时异常 1.PermissionError: [Errno 13] Permission denied (1)原因:权限错误:[Errno 13] 权限被拒绝 错误产生的原因是文件 ...

  9. vue 学习一 组件生命周期

    先上一张vue组件生命周期的流程图 以上就是一个组件完整的生命周期,而在组件处于每个阶段时又会提供一些周期钩子函数以便我们进行一些逻辑操作,而总体来讲 vue的组件共有8个生命周期钩子 beforeC ...

  10. python 获取年月日时分秒 获取当前时间 datetime函数

    import datetime#取当前时间print(datetime.datetime.now())#取年print(datetime.datetime.now().year)#取月print(da ...