Python学习day10-文件处理字符编码python2和3编码的区别python程序运行的大致流程文件的三种打开方式with管理文件操作上下文Tips:

Python学习day10-文件处理

字符编码

我们都知道,计算机只认识0和1的二进制数字,所以简单来说,字符编码就是使二进制和软件所能识别的字符之间相互转化的一个过程。

从字符编码的发展历史来看,最早出现的ASCII,即是从二进制到英文字符之间的相互转化,直到现在仍在继续运用,然后到各国自己开发的各种字符编码,像我大中华开发的gb2312编码,日本人的Shift_JIS编码以及韩国人的Euc-kr编码,都是只能识别本国的语言,不能兼容其他国家的语言。直到后来出现了一种能识别万国语言的编码,叫做Unicode,是世界的标准,从此之后乱码的问题基本不会出现了。

当然Unicode也是有缺点的,就是同样的数据来说,Unicode占用的空间会更大,会造成计算机空间的浪费,在传输和存储上都有着很大的弊端。

于是,世界上最牛逼的编码出现了,UTF-8,也被称为可变长编码,完美适用于所有情况。可是实际情况是,现在并不是所有的地方都在使用UTF-8。其原因还是个历史遗留问题,也就是现在几乎所有的计算机内存中存在的都是Unicode代码,而各个国家的代码也都要继续运行中,所以不能一次性全部换成UTF-8,必须使用Unicode。还有一个原因就是Unicode可以识别玩过语言,但是UTF-8目前还不能,但是随着时代的更替,所有内存中的代码都将变为UTF-8格式,到时UTF-8编码也将彻底取代Unicode编码。

总的来说,不想出现乱码的方法就是,字符按照什么标准编码的,就要按什么标准解码,也就是字符编码,只要编码解码的字符编码是相同的,文件就不会出现乱码。

python2和3编码的区别

python程序运行的大致流程

首先我们应该明白python程序运行的大致流程,基本可以分为三步:

  1. 启动Python解释器(对于计算机来说相当于文件编辑器)
  2. 打开文件,从硬盘将文件读入内存,显示输入的字符并检查语法是否有错误(设计字符编码)
  3. 点击运行,执行刚刚从硬盘中获取的内容,并且解释字符(设计字符编码,再去内存中)
  • 而python2和3 的主要区别就是在第三步中,具体在于:

    python3中用的编码字符是UTF-8,而python2中用的编码字符是Unicode加上文件头部指定的coding编码。

    我们都知道终端会有自己的默认编码,比如pycharm的默认编码是UTF-8

    所以这就导致了在python3中:

    • 假设终端的默认编码是GBK,可以识别GBK编码的变量
    • 但如果终端的默认编码是UTF-8,可以识别GBK编码的变量

    而在python2中:

    • 假设终端的默认编码是GBK,可以识别GBK编码的变量
    • 但如果终端的默认编码是UTF-8,就不能识别GBK编码的变量

文件的三种打开方式

python中对文件的打开有三种基础模式(默认为r模式):

x

1
f = open('file_name',mode,encoding = 'utf8')

  • r为read,只读模式

  • xxxxxxxxxx
    1

    1
    f = open('file_name','r',encoding = 'utf8')

    2
        data = f.read()

    3
    print()

  • w为write,只写模式(清除后写入)

  • xxxxxxxxxx
    1

    1
    f = open('file_name','w',encoding = 'utf8')

    2
         data = f.write()

  • a为append,追加模式(直接追加,不在原数据上修改)

  • xxxxxxxxxx
    1

    1
    f = open('file_name','a',encoding = 'utf8')

    2
    data = f.write()

文件读写的格式有两种(默认为b模式):

  • t为text,也就是文本读写

  • b为bytes,以二进制方式读写

    要注意,读写的格式要和读或者写组合才可以使用,比如rt,rb,wt,wb等等,不能单独使用,而且读和写不能同时使用。

with管理文件操作上下文

with模式相对于直接open赋值的话优点在于不用手动关闭文件,前文我们讲过,

xxxxxxxxxx
1

1
f = open('file_name',mode,encoding = 'utf8')

2
# 在结尾要加

3
f.close()

4
# 不然不能结束文件的打开

而with打开文件则不用,使用方法如下:

x

1
with open('file_name','r',encoding = 'utf8')as fr:

2
    data = fr.read()

3
    

4
#with还有一个优点就是with可以同时打开多个文件,中间以逗号间隔,方便文件之间的操作

5
with open('file_name','r',encoding = 'utf8')as fr,open('file_name1','w',encoding = 'utf8')as fw,open('file_name3','a',encoding = 'utf8')as fa:

6
    data1 = fr.read()

7
    data2 = fw.write()

8
    data3 = fa.write()

Tips:

今天说一些对学习python的一些看法,今天已经是学习python第十天了,虽然做的项目不多,但是真切感受到python写出来的程序执行效率确实不太高,从写`leetcode的算法题可以看出来,执行时间普遍都比较长,很容易就超过时间限制了。

但是python写代码的速度是真的快,各种模块,各种内置方法,基本自己能想到的一些想法,都可以通过很简单的途径出现,而不像编译型语言一样,很简单的功能都需要自己写很长,然后封装成接口使用,这一点确实优点很大。

继续努力,每一种编程语言,但凡火起来,总会有其原因,加油。

转载于:https://www.cnblogs.com/Xu-PR/p/11317248.html

Python学习day10-文件处理相关推荐

  1. [Python学习日记] 文件与文件系统(一)

    [Python学习日记] 文件与文件系统(一) 目录 Python3 File(文件) 方法 open() 方法 file 对象 目录 Python3 File(文件) 方法 open() 方法 Py ...

  2. python学习之文件处理

    Table of Contents 图片成批resize 多个文件夹中某文件,都保存到另一文件夹中 多个文件夹中某文件,都保存到另一文件夹中,并重命名 多个文件夹中,1/4数据用做测试集,其它用作训练 ...

  3. Python学习笔记——文件写入和读取

    1.文件写入 #coding:utf-8 #!/usr/bin/env python 'makeTextPyhton.py -- create text file'import os ls = os. ...

  4. python学习_22(文件)

    1 写一个函数,实现遍历一个数字和字母参杂的字符串,如果碰到字母则替换成,最后隔开的数字作为整体计算求和. 如"ab34aa243dd78eww89",则替换成的结果为:" ...

  5. Python学习:文件操作

    一.打开文件 1.格式 在python,使⽤open函数,可以打开⼀个已经存在的⽂件,或者创建⼀个新⽂件,语法如下: open(name, mode) name:是要打开的⽬标⽂件名的字符串(可以包含 ...

  6. python学习之文件读写

    实现文件的读写 #! /usr/bin/python file_add = open('test.txt','a') for i in range(1,5): file_add.write(" ...

  7. Python学习之==文件操作

    1.打开文件的模式 1 r,只读模式(默认)[不可写:文件不存在,会报错] 2 w,只写模式[不可读:不存在则创建:存在则删除内容] 3 a,追加模式[不可读:不存在则创建:存在则追加内容] 4 r+ ...

  8. Python学习12 文件的读写

    目标 文件的打开和关闭 mode缺省情况下表示只读r 文件的路径 前面加个r',代表其中的转义字符不起作用 文件的打开方式 案例:实现文件拷贝的功能 将某一文件夹下的某一文件 保存在当前文件 所在目录 ...

  9. Python 学习笔记——文件对象和操作

    Python的文件处理和相关输入输出能力.介绍文件对象(它的内建函数,内建方法和属性),标准文件,同时讨论文件系统的访问方法,文件执行,以及相关文件模块. 一,内建函数open()和file() 语法 ...

  10. Python学习之文件13

    文件操作 文件操作的流程 1. 建立文件对象: 2. 文件操作(读或者写) 3. 关闭文件 文件读操作 f = open('小重山','r',encoding = 'utf8') '''获得文件对象, ...

最新文章

  1. 2022-2028年中国复膜胶行业发展现状调查及市场前景趋势报告
  2. scrum敏捷开发的几款工具
  3. webpack 搭建rect项目
  4. Sqlserver__数据表排序记录和界面显示排序记录不一致的问题
  5. .net 2.0 点击按钮用js控制是否回发关于vs2005的webproject补丁
  6. .net中如何生成不重复的随机数
  7. 算法设计与分析——贪心算法——最优装载问题
  8. 如何在面试中通过工厂模式来给自己加分?逆袭面经分享
  9. 200多位大牛!2019两院院士拟推荐候选人最新名单
  10. 10进制转换16进制补足0_信息技术教师资格必考内容——进制换算(一)
  11. 【clickhouse】Error querying database. No buffer space available (maximum connections reached?): conne
  12. python 编译器_Python教程:编译器与解释器
  13. 在Winform开发框架中实现对数据库的加密支持
  14. windows各个原版系统下载集锦 MS-DOS Windows 3.1 Windows NT Windows 98等
  15. Java编程语言是什么
  16. matlab对列矢量求方差,matlab 求标准差 std函数用法
  17. 华为手机序列号前三位_华为Nova2s手机序列号前六位是TPG4C1是什么意思
  18. 72个炫酷的CSS技巧
  19. STM32CubeIDE 入门
  20. 基于VB2008的winsocket控件网络编程

热门文章

  1. android查看存储占用,Android获取App内存使用情况的方法
  2. 51nod 1021 石子归并 (动态规划 简单代码)
  3. 防火墙(11)——防止爬虫过多访问(ping)我们的服务器
  4. 相交链表—leetcode160
  5. 子集—leetcode78
  6. 16汇编 and和or实现大小写转换
  7. 12.当效率至关重要时,请在map::operator[]与map::insert之间谨慎作出选择
  8. [NOTE] DSVW靶场练习笔记
  9. 记录之tensorflow和pytorch中的取范数归一化操作
  10. c++ 模板教程(c语言中文网) 自己运行实例