• 六、字符编码和文件处理


    一、字符编码

    1、Python解释器执行Python程序的原理

    第一阶段:先启动Python解释器这个软件

    第二阶段:把.py文件的内容读入内存

    第三阶段:解释执行,识别语法

    2、什么是字符编码?

    字符编码就是字符与数字一一对应关系的标准。

    8bit(比特) = 1bytes(字节)

    一个英文字符占用1个bytes,也就是8bit,也叫ASCII码

    GBK:2个字节表示一个中文字符,1个字节表示一个英文字符

    unicode:2个字节表示一个字符(中文、英文等也是2个字节)

    utf-8:unicode的一种转换版本,1个字节表示一个英文字符,3个字节表示一个中文字符

    内存固定为unicode编码,不能修改。我们能控制的只是存到硬盘上的编码。

    3、指定编码

    python3解释器默认用utf-8编码,python2解释器默认用ASCII编码

    乱码的根本解决方法:文件存取用同一种编码标准(如utf-8)

    python中指定编码,在文件头写下:#coding:utf-8

    unicode转成gbk,utf-8叫编码encode

    gbk,utf-8转成unicode叫解码decode

    二、文件处理

    文件是操作系统提供给应用程序操作硬盘的一个虚拟单位,用于应用程序将数据永久保存。

    1、文件操作步骤:打开文件----读/写----关闭文件

    文件打开语法:

    open(r'文件的路径', mode = '打开文件的模式', encoding = '操作文件的字符编码')

    python提供了自动打开和关闭文件,语法:

    with open(r'文件的路径',mode='打开文件的模式',encoding='操作文件的字符编码') as 变量名:

    2、文件操作方法:

    读:

    .read()     读出文件所有的内容,光标移到文件末尾

    .readline()     一次读一行,光标移到第二行行首

    .readlines()    读出文件所有的内容,以行为单位,存在列表中

    写:

    .write()     针对文本模式的写,需要自己写换行符

    .writelines()    把列表或元组里面的值取出来,放进文件中

    循环读取文件每一行的方式:

    for line in f:

        print(line, end='')

    3、文件的打开模式

    t,b

    1)、t模式:

    text文本模式,只能读写文本文件。读写文件是以字符串为单位,需要指定字符编码

    2)、b模式:

    读写都是以bytes字节为单位,与t模式类似,不能单独使用,必须是rb、wb、ab,b模式下一定不能指定encoding字符编码

    4、文件的操作模式

    r(read),w(write),a(append)

    r:只读模式,文件不存在则报错;文件存在,光标停在文件开头

    w:只写模式,当文件存在时,清空;当文件不存在时,创建空文档,光标停在文件开头

    a:只追加写模式,当文件不存在时,创建空文档;当文件存在时,光标直接跑到末尾(大多用于记录日志)

    5、修改文件的方式

    方式一、先把文件全部读入内存----然后在内存中完成修改----再把修改后的结果覆盖写入原文件

    缺点:会在内容过大的情况下,占用过多的内存

    方式二、以读的方式打开原文件,以写的方式打开一个新文件----读一行原文件内容,如果该行内容时需要修改的内容,则写入新文件----删掉原文件,将新文件重命名为原文件

    6、拷贝文件

    解释器交互式拷贝命令:python src_file_path dst_file_path

    py文件拷贝文件代码:

    import sys

    i = sys.argv    #这一行的意思是把命令行中解释器后所有的参数都存成列表

    print(i)

    src_file_path = i[1]

    dst_file_path = i[2]

    with open('原文件路径', mode = 'rb') as src_file,

            open('拷贝文件路径', mode = 'wb') as dst_file:

    for line in src_file:

        dst_file_write(line)

  • 相关阅读:
    为 rails 本地项目搭建 elasticsearch 服务
    k8s与CICD--借助scp插件实现非容器项目的部署
    【Part1】用JS写一个Blog(node + vue + mongoDB)
    基于文本图形(ncurses)的文本搜索工具 ncgrep
    配置kubectl客户端通过token方式访问kube-apiserver
    关于C++ STL标准库中map 的多元素应用
    单元测试如何保证了易用的API
    Http请求连接池-HttpClient的AbstractConnPool源码分析
    安卓应用性能调试和优化经验分享
    为提升应用品质助力 绿标2.0检测项技术详解
  • 原文地址:https://www.cnblogs.com/Python1/p/8719167.html
Copyright © 2020-2023  润新知