zoukankan      html  css  js  c++  java
  • 字符编码复习与文件基础(二)

    1.字符编码
    字符与数字的对应关系表
    ASCII:能识别英文字符,1Byte=1英文字符
    hello
    8bit|8bit|8bit|8bit|8bit

    GBK:汉字与英文字符,2Byte=1中文字符 1Byte=1英文字符
    你a好
    8bit|8bit|8bit|8bit|8bit

    1111 1111|1111 1111 首位用来标识中文字符的一部分

    0111 1111|0111 1111 英文字符首位是0
    在内存编码中保存的是去掉首位进行保存的


    Unicode
    1.能够兼容万国字符
    2.与其他任意编码的二进制数都有映射关系
    Unicode->GBK 编码
    GBK->Unicode 解码
    UTF-8:是Unicode的精简版(转换格式)3个Bytes=1中文字符,1Byte=1英文字符

    2.在python中字符编码的应用
    1.保证执行python程序的前两个阶段不乱码,加文件头
    在文件的首行写入:#coding:文件存的时候用的编码

    2.字符串类型的演变:
    python2有两种"字符串"类型:
    类型一
    #coding:gbk
    x='上' #'上'存成了GBK编码侯的二进制

    类型二
    x=u'上' #'上'存成了Unicode类型

    python3有两种“字符串”相关类型
    x='上'#上存成了Unicode编码侯的二进制

    x.encode('gbk')转换为二进制编码是byte类型
    字符串可以编码成二进制类型

    3.总结:
    1.保证不乱码:以什么编码存的就应该以什么编码取
    2.在python2中定义字符串,应该加上前缀u
    3.在编写python文件时必须加上文件头

    文件处理的基本流程:
    1.打开文件 拿到文件对象(文件对象====>操作系统打开的文件==>硬盘)
    f=open(r'文件的路径',mode='文件打开模式',encoding='字符编码') r代表原生字符串

    2.操作文件:读/写
    f.read()
    f.readlines()
    f.readline()
    f.readable()


    3.向操作系统发送指令关闭文件,回收操作系统资源
    f.close()
    f=open(r'文件位置',mode='rt',encoding='utf-8')
    f.close()
    print(f)


    二:上下文管理
    with open(r'文件位置',mode='rt',encoding='utf-8') as f:
    data=f.read()
    print(data)
    print('='*100)
    for line in f:#读不出内容 第一步已经把文件内容读完文件指针已经指向到最后了
    print(line)

    今日内容
    1.文件打开模式
    2.文件操作方法
    3.文件内指针移动(不是主动控制的 是被动触发的)

    打开文件的模式有三种纯净模式:r(默认的) w a
    控制操作文件内容的两种模式:t(默认的) b
    大前提:tb模式均不能单独使用,必须与纯净模式结合使用
    t文本模式:
    1.读写文件都是以字符串为单位的
    2.只能针对文本文件
    3.必须指定encoding参数
    b二进制模式:
    1.读写文件都是以Bytes/二进制为单位的
    2.可以针对所有文件
    3.一定不能指定encoding参数

    二 打开文件模式详解
    1.r只读模式:在文件不存在时则报错,文件存在文件内指针直接转到开头
    with open('文件位置',mode='rt',encoding='utf-8')
    print(f.readlines())


    2.w只写模式:在文件不存在时创建空文档,文件存在会情况文件 文件指针跑到文件开头
    with open('b.txt',mode='wt',encoding='utf-8') as f:
    print(f.writable())#是否可写 返回true 可写
    print(f.readable())#是否可读 返回false 不可读
    f.write('你好 ')
    f.write('我好 ')#强调:在文件不关闭清空下,后写的内容一定跟着前面先写内容的后面
    f.write('大家好 ')
    f.write('111 22222 3333 ')
    lines=['1111','2222','33333']
    for line in lines:
    f.write(lines)
    f.writelines(line)

    #用户认证功能
    inp_name=input('请输入你的名字:').strip()
    inp_pwd=input('请输入你的密码:').strip()
    with open(r'.txt',mode='rt',encoding='utf-8') as f:
    for line in f:#把用户输入的名字和密码与读出内容做比对
    u,p=line.strip(' ').split(':')
    if inp_name==u and inp_pwd==p:
    print('登陆成功')
    break
    else:
    print('账号和密码错误')

    #注册功能:
    name=input('username>>>:').strip()
    pwd=input('password>>>:').strip()
    with open(r'.txt',mode='at',encoding='utf-8') as f:
    info='%s:%s '%(name,pwd)
    f.write(info)
    3.a只追加写模式:在文件不存在时会创建空文档,文件存在会将文件执政直接移动到文件末尾
    with open(r'.txt',mode='at',encoding='utf-8') as f:
    f.write('4444 555 ')

    #r+ w+ a+
    with open(r'a.txt',mode='r+t',encoding='utf-8') as f:#r+t可读可写模式
    print(f.readline())
    f.write('你好')

    b:读写都是以二进制为单位
    with open(r'.txt',mode='rb') as f:
    print(f.readline())
    f.write('你好')
    with open(r'.txt',mode='rb') as f:
    print(f.readline())
    data = f.read()
    print(data.decode('utf-8'))#利用utf-8进行解码
    with open(r'1.png',mode='rb') as f:
    print(f.readline())
    data = f.read()
    print(data)#不能解码 只能输出二进制

    with open(r'.txt',mode='wb') as f:
    f.write('你好'.encode('utf-8'))
    复制粘贴的原理
    with open(r'1.png',mode='rb') as f:
    data=f.read()

    with open(r'2.png',mode='wb') as f:
    f.write(data)
    # 拷贝工具
    src_file=input('源文件路径: ').strip()
    dst_file=input('目标文件路径: ').strip()
    with open(r'%s' %src_file,mode='rb') as read_f,open(r'%s' %dst_file,mode='wb') as write_f:
    for line in read_f:
    # print(line)
    write_f.write(line)

  • 相关阅读:
    Swing-文本输入组件(一)
    JFrame常用属性设置模板
    Swing-BoxLayout用法-入门
    linux创建和查看用户命令
    elasticsearch,http://ip:9200访问不到的解决办法
    U盘制作Linux系统盘
    Linux中oracle的安装,亲测
    Linux中yum的安装
    Linux中oracle安装时候报ora-00119解决办法
    eclipse中多个工程编译到同一个目录下
  • 原文地址:https://www.cnblogs.com/liugangjiayou/p/11616119.html
Copyright © 2011-2022 走看看