开发技术--浅谈文件操作与字符编码

开发|浅谈文件操作与字符编码

听说Python的文件操作很容易在某一些电脑上出问题,然而罪魁祸首就是字符编码。让我们来了解一些底层的编码方式。

前言

目前所有的文章思想格式都是:知识+情感。
知识:对于所有的知识点的描述。力求不含任何的自我感情色彩。
情感:用我自己的方式,解读知识点。力求通俗易懂,完美透析知识。

正文

本文主要分为两大部分,一部分是如何使用Python进行文件操作,另一部分是聊一下字符编码的那些事。(比较绕,尽量用最最最通俗的话表述~~)

文件操作

1.文件操作方式
open()
close()
直接看源码吧~~

def open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True):
    """
    Open file and return a stream.  Raise OSError upon failure.

    ========= ===============================================================
    Character Meaning
    --------- ---------------------------------------------------------------
    'r'       open for reading (default)
    'w'       open for writing, truncating the file first
    'x'       create a new file and open it for writing
    'a'       open for writing, appending to the end of the file if it exists
    'b'       binary mode
    't'       text mode (default)
    '+'       open a disk file for updating (reading and writing)
    'U'       universal newline mode (deprecated)
    ========= ===============================================================

    """
    pass

2.文件操作mode

    'r'       只读
    'w'       清空文件内容,只写
    'a'       打开文件,追加内容
    'b'       二进制操作文件,所以就有rb/wb/ab
    '+'       增加读写的功能,plus的功能~,所以就有w+/r+

3.读文件
1)最常用的是使用with 语句打开文件,不需要考虑关闭文件,自动进行文件的关闭
2)使用文件句柄f进行打开文件,必须自己指定关闭文件
3)文件读取的时候,可以使用 read() 读取所有的文件,也可以使用readline() 读取文件的一行
4)注意原始文件的编码,不指定pycharm默认的是utf-8,编码错误就乱码

4.写文件
1)写数据到文件,使用 write()函数,但是不是直接写到硬盘中,是先写到内存中,过一定时间之后写到硬盘中。
2)可以使用 flush() (强刷内存中数据到硬盘)

5.文件的常用操作
关键点:文件中光标的位置

seek()   # (注意:文件的编码,整数倍的文件编码单元的字节)
truncate()  # 截断数据
tell()   # 返回光标的位置
修改文件局部内容
    占内存修改
    占硬盘修改
   

6.附加了解内容
1)给文件重命名
可以使用 : os.rename() 或者 os.replace()
注意:在使用with打开文件重命名的时候,会报错,原因是当前文件还没有被关闭,是没有办法重命名的,可以更换打开方式,使用文件句柄打开。

2)sys.argv
sys.argv[]是从程序外部获取参数
sys.argv[0]表示代码本身文件路径
不理解的可以参考一下 这篇文章;https://www.cnblogs.com/aland-1415/p/6613449.html

字符编码

基础知识

1.二进制是什么?
二进制是0与1,计算机只认识二进制。但是人并不认识计算机认识的二进制(命令转化的二进制)。人只认知命令。那么命令如何变为二进制就是需要解决的问题。

2.ASCII表可以干什么?
ASCII表表示的256个字符的顺序表。既然有顺序,那么人可以读的是十进制,而十进制可以变为二进制,所以ASCII表也就是起到了特殊字符映射到二进制的作用。
Python查看输入字符对应的二进制的十进制数是多少的函数: ord(‘a‘)

注意:此时我们就可以输入ASCII表中的字符,就会转为二进制,计算机就看懂了。见下图ASCII表:

3.数据的表示
在计算机中,规定一个二进制数为一个bit(位)。
八个二进制数为八个bit,称为1个bytes,表示1个字节。
进而:1KB=1024B

GB2312与GBK

在基础知识,已经知道了ASCII表是做什么的,那么现在可以表示ASCII表中的字符到计算机中了,此时其他除了ASCII表中的字符去哪里找,有怎么存储到计算机中?
中国,最先使用的是 GB2312,随着需要表示字符数量的增多,开始使用GBK。此时就可以将汉字转换为计算机可以看懂的二进制数。
注意: GBK是在ASCII表中的进行的字符映射扩展。此时表示一个汉字需要2个字节

unicode

unicode编码,是将全球的语言字符进行了整合,所有的语言字符都可以在unicode中找到。
注意:unicode编码的所有字符全部需要4个字节。

utf家族

utf家族的代表明星是: utf-8。
由于使用unicode编码,文件的存储变大,并且不利于网络数据的传输和存储,所以改进的方式是utf家族,其中使用对多的就是utf-8.
UTF-8: 使用1、2、3、4个字节表示所有字符;优先使用1个字符、无法满足则使增加一个字节,最多4个字节。英文占1个字节、欧洲语系占2个、东亚(中国)占3个,其它及特殊字符占4个

编码的转换

1.前提知识:
1)计算机的内存中数据,也就是内存中的二进制0和1,是使用 unicode 编码。
2)所有的网络传输与数据存储(硬盘上的数据),是使用utf-8 编码。
3)Windows系统的编码是 gbk。

2.不同编码转换方法
使用unicode编码作为中介,首先将源编码文件进行解码(decode()解码)成为unicode,再将unicode编码(encode())成为目标编码格式

3.pycharm中声明编码格式
推荐声明:coding:utf-8 # -- encoding:utf-8 --
注意:第一行写编码声明,此时pycharm会自动将该文件的编码格式变为utf-8.自己留意书写与不写声明,pycharm右下角的变化。

结束语

小结一下,文件操作中,使用with语句打开的时候,如果对文件继续操作,不手动关闭,会报错。(自己踩得大坑,with语句不会在跳出with之后自动关闭,有一定的时延)
字符编码,真心不好理解,其实最简单的方式就是,分开看内存,硬盘,操作系统,软件,以及对应的编码是什么,就会很清楚了,祝大家学习愉快~~
一点感悟:时间很快,就是转眼间的事,尽量将自己的时间进行量化~~~

原文地址:https://www.cnblogs.com/Kate-liu/p/11237951.html

时间: 2024-11-05 12:26:27

开发技术--浅谈文件操作与字符编码的相关文章

流媒体网站开发技术浅谈

流媒体网站开发技术浅谈(2012-02) 2012-03-02    新闻来源:武汉广电网 张方东 (黄陂区广播影视局事业技术科) 摘 要:随着有线和无线网络宽带的高速发展,人们不再满足于因特网中仅有的文字.图片等简单信息,而越来越希望看到更直观.更丰富的影视节目,流媒体网站因此应运而生.本文从流媒体概念.流媒体格式.流媒体文件制作.流媒体文件传输.流媒体文件发布及流媒体网站部署等方面对开发流媒体网站作了详细阐述. 关键词:流媒体 网站开发 部署 技术 1.概述 在网络上传输多媒体有下载和流式传

开发技术--浅谈python数据类型

开发|浅谈python数据类型 在回顾Python基础的时候,遇到最大的问题就是内容很多,而我的目的是回顾自己之前学习的内容,进行相应的总结,所以我就不玩基础了,很多在我实际生活中使用的东西,我会在文章中提一下.并且我自己会根据这些内容进行相应的补充与扩展. 文章定位:不是科普文,是自己对于自己学习的总结. 前言 目前所有的文章思想格式都是:知识+情感. 知识:对于所有的知识点的描述.力求不含任何的自我感情色彩. 情感:用我自己的方式,解读知识点.力求通俗易懂,完美透析知识. 正文 正文的主要内

开发技术--浅谈Python函数

开发|浅谈Python函数 函数在实际使用中有很多不一样的小九九,我将从最基础的函数内容,延伸出函数的高级用法.此文非科普片~~ 前言 目前所有的文章思想格式都是:知识+情感. 知识:对于所有的知识点的描述.力求不含任何的自我感情色彩. 情感:用我自己的方式,解读知识点.力求通俗易懂,完美透析知识. 正文 首先介绍函数是什么,接着走进函数,并且发现函数的高级使用方法,最后列出常用的Python的内置函数. 函数是什么? 1.函数,在代码执行的是不执行,只有在调用函数的时候才会执行. 2.函数使用

Python基础3 文件操作、字符编码与转码

文件操作 对文件操作过程 打开文件,得到文件句柄赋值给变量 操作 关闭文件 打开文件的模式有: r,只读模式(默认). w,只写模式.[不可读:不存在则创建:存在则删除内容:] a,追加模式.[可读:   不存在则创建:存在则只追加内容:] "+" 表示可以同时读写某个文件 r+,可读写文件.[可读:可写:可追加] w+,写读 a+,同a "U"表示在读取时,可以将 \r \n \r\n自动转换成 \n (与 r 或 r+ 模式同使用) rU r+U "b

python学习笔记(集合的使用、文件操作、字符编码与转码、函数)

集合 集合(set):把不同的元素组成一起形成集合,是python基本的数据类型. 集合元素(set elements):组成集合的成员 为什么需要集合? 集合的作用 1 .列表去重复数据 按照现有知识的解决思路:先设置空列表,然后使用for寻获,把需要去重的列表的第一个数据放到新列表中,然后依次取出第二个数据,把第二个数据和第一个数据作比较,如果不一样,则存入新列表中:以此类推,每取一次都要和新列表中的数据作对比,不一样的则添加入新列表中. 2. 关系测试 比如有学员同时报了python班和l

Python基础(集合用法、文件操作、字符编码转换、函数)

集合(Set)及其函数 集合是一个无序的.无重复元素的序列. 1 list = {1, 3, 6, 5, 7, 9, 11, 3, 7} # 定义集合方式一 2 list1 = set([1, 3, 6, 5, 7, 9, 11, 3, 7]) # 定义集合方式二 3 list2 = set() # 定义一个空集合 4 5 print(list1, list) # 打印后可看到,集合中的元素已自动去重 6 print(3 in list) # 判断一个元素是否在集合中,返回bool值 7 pri

day3--集合、文件操作、字符编码与转换、函数

list1 = set([1, 2, 3, 4, 5, 6, 5, 5, 5])list2 = set([11, 2, 36, 'a', 5, 6, 5, 5, 5])list3 = set([1, 2, 3])list4 = set(['a', 'b', 'c']) 求交集print(list1.intersection(list2))print(list1&list2)输出{2, 5, 6} 求并集print(list1.union(list2))print(list1 | list2)输出

.net中对象序列化技术浅谈

.net中对象序列化技术浅谈 2009-03-11 阅读2756评论2 序列化是将对象状态转换为可保持或传输的格式的过程.与序列化相对的是反序列化,它将流转换为对象.这两个过程结合起来,可以轻松地存储和传输数 据.例如,可以序列化一个对象,然后使用 HTTP 通过 Internet 在客户端和服务器之间传输该对象.反之,反序列化根据流重新构造对象.此外还可以将对象序列化后保存到本地,再次运行的时候可以从本地文件 中“恢复”对象到序列化之前的状态.在.net中有提供了几种序列化的方式:二进制序列化

Android安全开发之浅谈密钥硬编码

Android安全开发之浅谈密钥硬编码 作者:伊樵.呆狐@阿里聚安全 1 简介 在阿里聚安全的漏洞扫描器中和人工APP安全审计中,经常发现有开发者将密钥硬编码在Java代码.文件中,这样做会引起很大风险.信息安全的基础在于密码学,而常用的密码学算法都是公开的,加密内容的保密依靠的是密钥的保密,密钥如果泄露,对于对称密码算法,根据用到的密钥算法和加密后的密文,很容易得到加密前的明文:对于非对称密码算法或者签名算法,根据密钥和要加密的明文,很容易获得计算出签名值,从而伪造签名. 2 风险案例 密钥硬