字符编码与python文件处理

————————————————

字符编码

1、常见的编码

ASCII: 美国人发明的,只编码英文字母和符号,1个字节。

GB2312: 中国人发明的,增加了中文汉字和符号,2个字节。

Unicode: 为了把所有语言都统一到一套编码里,一般是2个字节,生僻字4个字节。

UTF-8: 为了节省英文字符内存空间,UTF-8可变长编码,常用的英文字母被编码成1个字节,汉字通常是3个字节,生僻的字符编码成4-6个字节。

2、关于字符编码需要记住的结论

(1)内存固定使用unicode,我们可以改变的是存入硬盘采用格式

英文+汉字-》unicode-》gbk

英文+日文-》unicode-》shift-jis

万国字符》-unicode-》utf-8

(2)文本文件存取乱码问题

存乱了:解决方法是,编码格式应该设置成支持文件内字符串的格式

取乱了:解决方法是,文件是以什么编码格式存如硬盘的,就应该以什么编码格式读入内存

(3)python解释器默认读文件的编码

python3默认:utf-8

python2默认:ASCII

指定文件头修改默认读文件的编码:

在py文件的首行写:

# coding:gbk

(4)保证运行python程序前两个阶段不乱码的核心法则:

指定文件头

# coding:文件当初存入硬盘时所采用的编码格式

(5)

python3的str类型默认直接存成unicode格式,无论如何都不会乱码

保证python2的str类型不乱码

x=u'上' 前面加个u

(6)了解

python2解释器有两种字符串类型:str、unicode

# str类型

x='上' # 字符串值会按照文件头指定的编码格式存入变量值的内存空间

# unicode类型

x=u'上' # 强制存成unicode

python中的文件处理

————————————————

1、什么是文件?

文件是操作系统提供给用户/应用程序来操作硬盘的一种虚拟的接口。

2、为什么要用文件?

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

3、如何操作文件?

需要先了解的知识点

首先,我们需要了解一下关于文件的两种模式:

(1)控制文件读写内容的模式

t文本模式(默认的模式):

读写都是以str(unicode)为单位的

读写的必须是文本文件,图片或者视频等可能会报错

必须指定encoding=‘utf-8’

b二进制模式(bytes)

1.读写都是以bytes为单位

2.可以针对所有的文件

3,一定不能指定字符编码,即encoding参数

总结:

1.在操作纯文本文件方面,t模式确实帮我们省去了编码与解码的环节,b模式则还需要手动的进行编码和解码,所有纯文本下t模式更加方便。

2.但是对于那些非文本文件(如图片、视频等),就只能用b模式

(2)控制文件读写操作的模式

r只读模式

w只写模式

a只追加写模式

+:r+、w+、a+

具有详解之r模式:

1.r为open方法默认的操作模式,当文件不存在时会报错,当文件存在时文件的指针会跳到开始的位置

2.r模式会把文件所有的内容从硬盘读到内存

3.第二次读的时候,读不出任何东西,因为第一次读之后指针已经在文件末尾了

具有详解之w模式:

1.只写模式,当文件不存在时会自动创建文件,当文件存在时会清空文件数据,指针位于开始的位置

2.只有f.wirte()方法,只有写模式,wirte里有一个参数,是需要写入的数据

3.在w模式打开文件没有关闭文件的情况下,连续写入,新的内容总是跟在旧的之后

4.如果重新以w模式打开文件,则会清空文件内容

具有详解之a模式:

1.只追加写模式,在文件不存在时,会创建空文档,指针在开头;当文件存在时,文件指针会直接跳到末尾

具有详解之+模式:

1.+模式不能单独使用,需要配合r、w和a联合使用

open()方法

1.打开文件

f=open(r'aaa/a.txt',mode='rt')
参数说明:第一个参数指的是需要打开的文件路径
第二个参数mode指的是文件读写内容和操作的方式,默认是rt模式
# f的值是一种变量,占用的是pycharm应用程序的内存,f返回的是一个特殊的文件对象,open方法除了会返回一个文件对象给f。还会使操作系统打开一个文件。

2.操作文件(读写操作)

res = f.read()  # 从头到尾全部读取出来
res = f.readline() # 一次读一行
res = f。readlines() # 结果为一个大列表 # read()里的可选n参数,在t模式下是指读出几个字符;在b模式下是这读出多少个字节。
# 操作文件实际是应用程序对文件的读写请求都是在向操作系统进行请求,然后操作系统控制硬盘把数据读入内存、或者写入硬盘 注意:read和readlines方法都是将内容一次读出,如果内容过大,很可能会导致内存溢出,因此,必须分多次读入,采用for或者while循环的方式。 res=f.writelines() #将列表中的内容写到文件中
f.flush()立马刷新,将内存的数据写到硬盘中

3.关闭文件

f.close()  # 回收open时操作系统开辟的系统资源

with open()方法

with open()方法的主要特点是,你打开文件之后就不需要你在手动关闭文件占用的系统资源了,它会帮你自动关闭;同时,它还支持同时打开多个文件;
with open(‘a.txt’,mode='rt')as f1,open('b.txt',mode='rt') as f2:
res1=f1.read()
res2=f2.read()

注意:在以rt模式操作文件时,需要指定encoding=‘utf-8’!!!为什么呢?

因为,windows默认读文件的编码是gbk,Linux默认读文件的编码是utf-8

如果在opne打开文件的时候没有指定编码格式为utf-8时,pycharm默认存文件是utf-8,但是在读取文件时,由于没有指定编码格式,就会自动调用操作系统本身的默认的读编码格式!!!这是Windows系统下就会报错!;指定了编码格式,后面读取的时候会自动按照当时编码的格式进行解码。

4、文件指针移动

文件指针移动的单位都是以字节bytes为单位,只有在t模式下是指移动字符个数。

f.seek(n,模式)用来负责指针的移动,是以字节为单位。

参数说明:n指的是移动的字节个数

模式0:参照物是文件开头的位置

模式1:参照物是当前指针所在的位置

模式2:参照物是文件末尾的位置,指针是倒着移动(向左移),n为负值

强调:只有0模式可以在t下使用,其他都不行。

f.tell() #获取文件指针当前位置

字符编码和python中的文件处理的更多相关文章

  1. 字符编码和Python代码操作文件

    字符编码和Python代码操作文件 读写模式之a模式 # a模式 只追加模式 # 路径不存在:自动创建 with open(r'a.txt','a',encoding='utf8') as f: pa ...

  2. python学习之【第十一篇】:Python中的文件操作

    1.前言 在Python中,对文件的操作主要遵循以下流程: 打开文件,得到文件句柄并赋值给一个变量 通过文件句柄对文件进行操作 关闭文件 2.打开文件 使用open函数,可以打开一个已经存在的文件,或 ...

  3. 【Python】解析Python中的文件操作

    目录结构: contents structure [-] 简介 Python中的文件类型 内置函数的文件操作 open()函数 Mode 创建文本文件 读取文本文件 循环文件对象 关闭文件 With语 ...

  4. [转]字符集、字符编码、XML中的中文编码

    字符集.字符编码.XML中的中文编码 作为程序员的你是不是对于ASCII .UNICODE.GB2321.UTF-7.UTF-8等等不时出现在你面前的这些有着奇怪意义的词感到很讨厌呢,是不是总觉得好象 ...

  5. [转]python中对文件、文件夹的操作——os模块和shutil模块常用说明

    转至:http://l90z11.blog.163.com/blog/static/187389042201312153318389/ python中对文件.文件夹的操作需要涉及到os模块和shuti ...

  6. 字符集、字符编码、XML中的中文编码

    字符集.字符编码.XML中的中文编码 作为程序员的你是不是对于ASCII .UNICODE.GB2321.UTF-7.UTF-8等等不时出现在你面前的这些有着奇怪意义的词感到很讨厌呢,是不是总觉得好象 ...

  7. Python中的文件和目录操作实现

    Python中的文件和目录操作实现 对于文件和目录的处理,虽然可以通过操作系统命令来完成,但是Python语言为了便于开发人员以编程的方式处理相关工作,提供了许多处理文件和目录的内置函数.重要的是,这 ...

  8. Python中对 文件 的各种骚操作

    Python中对 文件 的各种骚操作 python中对文件.文件夹(文件操作函数)的操作需要涉及到os模块和shutil模块. 得到当前工作目录,即当前Python脚本工作的目录路径: os.getc ...

  9. 【python系统学习17】python中的文件读写

    python中的文件读写 文件读写,是Python代码调用电脑文件的主要功能,能被用于读取和写入文本.音频片段.Excel文档.邮件以及任何保存在电脑上的东西. 可使用python批量的操作本地文件, ...

随机推荐

  1. 什么!Sentinel流控规则可以这样玩?

    项目源码地址:公众号回复 sentinel,即可免费获取源码 前言 上一篇文章中,我们讲解了关于sentinel基本介绍以及流控规则中直接和快速失败的效果,有兴趣的可以去看上一篇文章,今天,我们给大家 ...

  2. JS倒计时(刷新页面不影响)的实现思路

    最近在做一个项目,用到了点击按钮实现倒计时,这个用js来实现很简单.但是遇到了一个问题 页面刷新后js重新加载导致 倒计时重新开始,或者直接初始化了 后来通过 cookie 保存来实现了js倒计时,关 ...

  3. JavaSE_多线程入门 线程安全 死锁 状态 通讯 线程池

    1 多线程入门 1.1 多线程相关的概念 并发与并行 并行:在同一时刻,有多个任务在多个CPU上同时执行. 并发:在同一时刻,有多个任务在单个CPU上交替执行. 进程与线程 进程:就是操作系统中正在运 ...

  4. python基础学习5

    Python的基础学习5 内容概要 流程控制理论 if判断 while循环 内容详情 流程控制理论 # 流程控制:即控制事物执行的流程 # 执行流程的分类 1.顺序结构 从上往下按顺序依次执行 2.分 ...

  5. CentOS6.5修改镜像源问题

    千呼万唤使出来阿,随着centos版本不断地更新好多镜像源已经被放弃了治疗,尤其是低版本的centos,下面以CentOS6.5为例进行刨析吧! 上干货: 配置文件 vi /etc/yum.repos ...

  6. 『忘了再学』Shell基础 — 30、sed命令的使用

    目录 1.sed命令说明 2.行数据操作 (1)查看文件中的数据 (2)删除文件中的数据 (3)向文件中追加数据 (4)向文件中插入数据 (5)修改文件中的多行数据(删除,追加,插入) (6)替换文件 ...

  7. ExtJS 布局-Table布局(Table layout)

    更新记录: 2022年6月1日 开始. 2022年6月10日 发布. 1.说明 table布局类似表格,通过指定行列数实现布局. 2.设置布局方法 在父容器中指定 layout: 'table' la ...

  8. awk运用三维数组进行插值获得任意经纬度处的水层沉积层地壳厚度

    awk三维数组与插值 目的:给定经纬度,获得该点地下的冰层水层沉积层和地壳的厚度 实现:awk一行命令 下载Crust1.0模型 该数据集的详细介绍见官网. 解压后有几个文件:crust1.vp,cr ...

  9. springboot available: expected at least 1 bean which qualifies as autowire candidate奇葩问题

    Exception encountered during context initialization - cancelling refresh attempt: org.springframewor ...

  10. vue大型电商项目尚品汇(后台终结篇)day06 重磅!!!

    自此整个项目前后台,全部搭建完毕. 今天是最后一天,内容很多,而且也比较常用,一个图标类数据可视化,一个后台的权限管理,都是很经典的类型. 一.数据可视化 1.简介 专门的一门学科,有专门研究这个的岗 ...