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

    文件处理

    字符编码

    一丶计算机基础

    046-字符编码-计算机基础.png?x-oss-process=style/watermark

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

    二丶文本编辑器存取文件的原理

    1.打开了编辑器就打开了启动了一个进程,是在内存中的,所以,用编 辑器编写的内容也都是存放与内存中的,断电后数据丢失。

    2.要想永久保存,需要点击保存按钮:编辑器把内存的数据刷到了硬盘 上。

    3.在我们编写的一个py文件(没有执行),跟编写其他文件没有任何 区别,都只是在编写一堆字符而已。

    三丶Pyhthon解释器执行py文件的原理

    ~第一阶段:Python解释器启动,此时就相当于启动了一个文本编辑 器。

    ~第二阶段:Python解释器相当于文本编辑器,去打test.py文件,从 一ing盘上将test.py文件,从硬盘上将test.py文件内容读入到内中。

    ~第三阶段:Python解释器解释执行刚刚加载到内存中的test.py的代 码。(ps:在该阶段,即真正执行代码时,才 会识别python的语 法,执行文件内代码,当执行到name= 'egon'时,会开辟内存空间 存放字符串"egon")

    四丶 Python解释器与文件本编辑的异同

    ~相同点:Python解释器是解释执行文件内容的,因而Python解释器 具备读py文件的功能,这一点与文本编辑器一样。

    ~不同点:文本编辑器将文件内容读入内存后,是为了显示或编辑,根 本不会理会Python的语法,而Python解释器将文件内容读入内存后 ,可不是为了给你瞅一眼Python代码写的啥,而是为了执行Python 代码、会识别Python语法。

    五丶编码

    ~Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种 语言中的每个字符设定了统一并且唯一的二进制编码,规定虽有字 符和符号最少由 16 位来表示(2个字节),即:2 **16 = 65536, 注:此处说的的是最少2个字节,可能更多.

    ~utf-8,是对Unicode编码的压缩和优化,他不再使用最少使用2个字节 节,而是将所有的字符和符号进行分类:ascii码中的内容用1个字节 保存、欧洲的字符用2个字节保存,东亚的字符用3个字节保存.

    046-字符编码-utf8与Unicode转换.png?x-oss-process=style/watermark

    字符按照什么标准而编码的,就要按照什么标准解码。

    用什么代码编写就用什么代码打开。

    Python2和3字符编码的区别

    python2默认的解释器编码ascii
    python3默认的解释器编码utf-8

    文件的三种打开方式

    r:只读

    f.read()

    w:清空后写入(文件不存在自动创建)

    f.weite()

    a:追加(文件不存在自动创建)

    f.write()

    文本模式:t

    二进制模式:b

    t/b无法单独使用,只能和r/w/a一起使用

    with管理文件上下文

    with open() as f: # 自动关闭

    pyinstaller的使用

    pip instal pyinstaller

    切换路径到文件夹(文件夹包含img.ico和test.py这两个文件)

    pyinstaller -i img.ico -F test.py

    文件的高级应用

    打开的高级模式

    1. r+:可读可写,指针文件末

    2. w+:可读可写,清空文件(极力不推荐)

    3. a+ :可读可写

    文件的高级方法

    1. seek: 单位字节
    2. tell:单位字节
    3. read(n):单位字节
    4. truancate : 单位字节

    用 rb 模式

    ```python
    # with open('test.py', 'rb') as fr:
        # fr.seek(1, 0)  # 0是从文件头开始,走1个字节
        # fr.seek(1, 1)  # 1是从当前位置开始,走1个字节
        # fr.seek(1, 2)  # 2是从文件末开始,走1个字节
        # fr.seek(0, 2)  # 2是从文件末开始,走1个字节  # 定位到文件末尾
        # print(f'fr.tell():{fr.tell()}')  # 告诉你当前指针的位置
        # print(fr.read())  # 中 --> xe4xb8xad
    
    
    # with open('test.py', 'a+b') as fa:
    #     fa.truncate(1)
    
    
    with open('test.py', 'rt',encoding='utf8') as fr:
        print(fr.read(3))  # 3个字符
    ```
    

    文件的还原方法

    Local history

    修改文件的两种方式

    文件没有修改这一说,只有覆盖。

    with open ('tset.py','r+',endcoding='utf8') as fr:
        fr.seek(3)
        fr.write('中')
        fr.flush()   #如果不加flush短暂的停留在内存中,然后再刷入硬盘。
    			#如果加了会更快速刷入硬盘       
    
    with open ('tset.py','r',encoding='utf8') as fr,
    		open('tset_swap.py','w',encoding='utf8') as fw:
           data = fr.read()
      	   data = data.repalce('sb','dsb')
      	   fw.write(data)
      	   
      	   import os
      	   
      	   os.remove('tset.py')
      	   os.remove('tset_swap.py','test.py')
    
  • 相关阅读:
    Lucene.Net 2.3.1开发介绍 —— 二、分词(一)
    控制‘控制台应用程序’的关闭操作
    详解for循环(各种用法)
    敏捷软件开发
    Sql Server的一些知识点
    在SharePoint 2010 中配置Remote Blob Storage FILESTREAM Provider
    使用LotusScript操作Lotus Notes RTF域
    JOpt Simple 4.5 发布,命令行解析器
    John the Ripper 1.8.0 发布,密码破解工具
    PacketFence ZEN 4.0.1 发布,网络接入控制
  • 原文地址:https://www.cnblogs.com/shiqizz/p/11355017.html
Copyright © 2011-2022 走看看