zoukankan      html  css  js  c++  java
  • 字符编码与文件处理

    ---恢复内容开始---

    一 了解字符编码的知识储备

    一计算机的基础知识

    应用程序任何操作硬件的请求都需要向操作系统发起系统调用,然后由操作系统去操作硬件。

     

    二、文本编辑器存取文件的原(nodepad++,pycharm,word)

    1、打开编辑器就打开了一个启动过程,是在内存中的,所以用编辑器编写的内容也都存放在内存中,断电后数据则会丢失。
    
    2、要想永久保存,需要点击保存按钮:即编辑器把内存的数据刷到了硬盘上。
    
    3、在我们编写一个py文件(没有执行),跟编写其他文件没有任何区别,都只是编写一堆字符而已。

    三  python解释器执行py文件的原理,例如python test,py

    第一阶段:python 解释器启动, 此时就相当于一个文本编辑器
    
    第二阶段:python解释器相当于文本编辑器,去打开test.py文件,从硬盘上将test.py的文件内容读入到内存中(小复习:python的解释性只关心文件的内容,不关系文件后缀名)
    
    第三阶段:python解释器解释执行刚刚加载到内存中test.py的代码(ps:在该阶段,即真正执行代码时才会识别python的语法,执行文件内代码,当执行到 name='egon'时,会开辟内存空间存放字符串‘egon’)

    四 总结python解释器与文件本编辑的异同

    相同点:python解释器是解释执行文件内容的,因为python解释器具备读py文件的功能,这一点与文本编辑器一样
    
    不同点:文本编辑器将文件内容读入内存后,是为了显示或编辑,根本不会去理会python的语法,而python解释器将文件内容读入内存后,是会执行python的代码 识别python的语法。

    二:字符编码介绍

    一:什么是字符编码

    我们都知道计算机的语言是数字(二进制),而我们平时使用计算机时,用的都是人类能读懂的字符(用高级语言编程的结果无非是在文件内写了一堆字符)若想要计算机读懂人类的字符必须要经过一个过程:
    
    字符-------(翻译过程)--------数字
    
    这个过程十几就是一个字符如何对应一个特定数字的标准, 这个标准即称之为字符编码

    二:字符编码的发展

    分为三个阶段

    一阶段是,以英文为基础的ASCII表
    
    第二阶段是为了满足英文和中文, 制定了gbk字符编码表
    
    第三阶段, 为了避免多语言文本中出现冲突, 应运而生了万国符编码表,unicode,其中英文字符占用2个字节, 占用的存储空间比较大, 所以现在又有了优化版的 简称UTF-8
    
    但是目前是属于过度阶段, 还是以Unicode为标准。
    
     

     三、字符编码的总结

    第一点:保证不乱码的核心,法则就是 字符按照什么标准而编码的就要按照上面标准标准解码, 此处的标准就是值得字符编码。
    
    
    第二点:在内存中写的所有的字符, 一视同仁, 都是unicode编码,然后由unicode转换成其他编码格式。

    Unicode---->>编码encode --->utf-8
    utf-8------>> 解码 decode ---->> unicode

    四  文件头

    文件头的格式是 #coding:后面加字符编码  例如:#coding:utf-8.
    
    它的作用是告诉python解释器, 用指定的字符编码

     三 、文件处理

    一,介绍。

     计算机系统分为:计算机硬件, 操作系统, 应用程序三部分

    我们用python或其他语言编写的应用程序若想要把数据永久保存下来,必须要保存于硬盘中,这就涉及到应用程序要操作硬件,众所周知,应用程序是无法直接操作硬件的,这就用到了操作系统。操作系统把复杂的硬件操作封装成简单的接口给用户/应用程序使用,其中文件就是操作系统提供给应用程序来操作硬盘虚拟概念,用户或应用程序通过操作文件,可以将自己的数据永久保存下来。

    有了文件的概念,我们无需再去考虑操作硬盘的细节,只需要关注操作文件的流程:

    1:打开文件, 得到文件句柄并赋值给一个变量
    2:通过句柄对文件进行操作
    3:关闭文件

     二,在python中

    1:打开文件,得到文件句柄并赋值给一个变量
    f=open('a.txt','r',encoding='utf-8'#默认打开模式为r(只读)
    若没有为open指定编码, 那么操作系统则默认自己的编码取打开文件,windows下是gbk,linux下是utf-8.
    这就用到了上节课讲的字符编码的知识:若要保证不乱码,文件以什么方式存的,就要以什么方式打开。
    

    2:通过句柄对文件进行操作, date=f.read() 3:关闭文件 f.close()


    但是很多同学还是会忘记f.close(),对于这些不长脑子的同学,我们推荐傻瓜式操作方式:使用with关键字来帮我们管理上下文
    with open('a.txt','w') as f:
        pass
     
    with open('a.txt','r') as read_f,open('b.txt','w') as write_f:
        data=read_f.read()
        write_f.write(data)

    三,文件默认的打开模式是t模式:文本模式

    操作文件的模式有三种模式:  r:只读    ,w:只写并清空原文件   a:在原文件的最后可以继续写文件

    1:r:只读,readline:只读一行

    f=open('a.txt',mode='r',encoding='utf-8')
    print(f.read())  #打印结果则是读取a文本文件中的数据
    f.close()         #切记要关掉操作系统中的文件, 否则下次无法从新读取

    f=open('a.txt',mode='r',encoding='utf-8')
    print(f.readline(),end='')
    print(f.readline(),end='')
    print(f.readline(),end='') #print()有自动换行的作用, 若不添加的end=''的话,则会空空两行
    print(f.readline(),end='')
    f.close()

    或者不加f.close()用 以下表达
    with open('a.txt',encoding='utf-8') as f:
    for line in f:
    print(line,end='')


    2:w:只写  f.write()      或者f.writelines() 只写        文件过大时要使用 with as f 的形式

    f=open('a.txt',mode='r',encoding='utf-8')
    print(f.read())
    f.close()

    f=open('a.txt',mode='r',encoding='utf-8') #mode='rt'
    print(f.readlines())
    f.close()                    循环文件不要用该方式, 否则文件过大的情况下有可能会撑爆内存

    with open('a.txt',encoding='utf-8') as f:
        for line in f:
              print(line,end='')

    注意 : 只写模式

    当文件存在时,清空, 当文件不存在时,创建空文档

      

    3  a:模式是只追加写模式

    注意当文件不存在时,创建空文件

    当文件存在时,光标直接跑到文件末尾

    f=open('a1.txt',mode='a',encoding='utf-8')

    ---恢复内容结束---

  • 相关阅读:
    (转)MVC3+EF4.1学习系列(十一)EF4.1常见的问题解决
    (转)iReaper for wp7正式发布
    (转)Asp.net MVC 多语言问题的解决方案
    (转)SQL Server 2005 性能优化实战系列(文章索引)
    (转)结合领域驱动设计的SOA分布式软件架构
    (转)细说jquery ui和jqgrid的ASP.NET实现
    (转)简单代码生成器原理剖析
    (转)[翻译]ASP.NET MVC 3 开发的20个秘诀(十八)[20 Recipes for Programming MVC 3]:自动完成搜索
    sql优化: MySQL Explain详解
    mysql优化: show processlist 详解
  • 原文地址:https://www.cnblogs.com/lx3822/p/8625737.html
Copyright © 2011-2022 走看看