• day---06 文件的操作


    ASCII 码表

    Bin
    (二进制)
    Oct
    (八进制)
    Dec
    (十进制)
    Hex
    (十六进制)
    缩写/字符
    解释
    0000 0000
    00
    0
    0x00
    NUL(null)
    空字符
    0000 0001
    01
    1
    0x01
    SOH(start of headline)
    标题开始
    0000 0010
    02
    2
    0x02
    STX (start of text)
    正文开始
    0000 0011
    03
    3
    0x03
    ETX (end of text)
    正文结束
    0000 0100
    04
    4
    0x04
    EOT (end of transmission)
    传输结束
    0000 0101
    05
    5
    0x05
    ENQ (enquiry)
    请求
    0000 0110
    06
    6
    0x06
    ACK (acknowledge)
    收到通知
    0000 0111
    07
    7
    0x07
    BEL (bell)
    响铃
    0000 1000
    010
    8
    0x08
    BS (backspace)
    退格
    0000 1001
    011
    9
    0x09
    HT (horizontal tab)
    水平制表符
    0000 1010
    012
    10
    0x0A
    LF (NL line feed, new line)
    换行键
    0000 1011
    013
    11
    0x0B
    VT (vertical tab)
    垂直制表符
    0000 1100
    014
    12
    0x0C
    FF (NP form feed, new page)
    换页键
    0000 1101
    015
    13
    0x0D
    CR (carriage return)
    回车键
    0000 1110
    016
    14
    0x0E
    SO (shift out)
    不用切换
    0000 1111
    017
    15
    0x0F
    SI (shift in)
    启用切换
    0001 0000
    020
    16
    0x10
    DLE (data link escape)
    数据链路转义
    0001 0001
    021
    17
    0x11
    DC1 (device control 1)
    设备控制1
    0001 0010
    022
    18
    0x12
    DC2 (device control 2)
    设备控制2
    0001 0011
    023
    19
    0x13
    DC3 (device control 3)
    设备控制3
    0001 0100
    024
    20
    0x14
    DC4 (device control 4)
    设备控制4
    0001 0101
    025
    21
    0x15
    NAK (negative acknowledge)
    拒绝接收
    0001 0110
    026
    22
    0x16
    SYN (synchronous idle)
    同步空闲
    0001 0111
    027
    23
    0x17
    ETB (end of trans. block)
    结束传输块
    0001 1000
    030
    24
    0x18
    CAN (cancel)
    取消
    0001 1001
    031
    25
    0x19
    EM (end of medium)
    媒介结束
    0001 1010
    032
    26
    0x1A
    SUB (substitute)
    代替
    0001 1011
    033
    27
    0x1B
    ESC (escape)
    换码(溢出)
    0001 1100
    034
    28
    0x1C
    FS (file separator)
    文件分隔符
    0001 1101
    035
    29
    0x1D
    GS (group separator)
    分组符
    0001 1110
    036
    30
    0x1E
    RS (record separator)
    记录分隔符
    0001 1111
    037
    31
    0x1F
    US (unit separator)
    单元分隔符
    0010 0000
    040
    32
    0x20
    (space)
    空格
    0010 0001
    041
    33
    0x21
    !
    叹号
    0010 0010
    042
    34
    0x22
    "
    双引号
    0010 0011
    043
    35
    0x23
    #
    井号
    0010 0100
    044
    36
    0x24
    $
    美元符
    0010 0101
    045
    37
    0x25
    %
    百分号
    0010 0110
    046
    38
    0x26
    &
    和号
    0010 0111
    047
    39
    0x27
    '
    闭单引号
    0010 1000
    050
    40
    0x28
    (
    开括号
    0010 1001
    051
    41
    0x29
    )
    闭括号
    0010 1010
    052
    42
    0x2A
    *
    星号
    0010 1011
    053
    43
    0x2B
    +
    加号
    0010 1100
    054
    44
    0x2C
    ,
    逗号
    0010 1101
    055
    45
    0x2D
    -
    减号/破折号
    0010 1110
    056
    46
    0x2E
    .
    句号
    0010 1111
    057
    47
    0x2F
    /
    斜杠
    0011 0000
    060
    48
    0x30
    0
    字符0
    0011 0001
    061
    49
    0x31
    1
    字符1
    0011 0010
    062
    50
    0x32
    2
    字符2
    0011 0011
    063
    51
    0x33
    3
    字符3
    0011 0100
    064
    52
    0x34
    4
    字符4
    0011 0101
    065
    53
    0x35
    5
    字符5
    0011 0110
    066
    54
    0x36
    6
    字符6
    0011 0111
    067
    55
    0x37
    7
    字符7
    0011 1000
    070
    56
    0x38
    8
    字符8
    0011 1001
    071
    57
    0x39
    9
    字符9
    0011 1010
    072
    58
    0x3A
    :
    冒号
    0011 1011
    073
    59
    0x3B
    ;
    分号
    0011 1100
    074
    60
    0x3C
    <
    小于
    0011 1101
    075
    61
    0x3D
    =
    等号
    0011 1110
    076
    62
    0x3E
    >
    大于
    0011 1111
    077
    63
    0x3F
    ?
    问号
    0100 0000
    0100
    64
    0x40
    @
    电子邮件符号
    0100 0001
    0101
    65
    0x41
    A
    大写字母A
    0100 0010
    0102
    66
    0x42
    B
    大写字母B
    0100 0011
    0103
    67
    0x43
    C
    大写字母C
    0100 0100
    0104
    68
    0x44
    D
    大写字母D
    0100 0101
    0105
    69
    0x45
    E
    大写字母E
    0100 0110
    0106
    70
    0x46
    F
    大写字母F
    0100 0111
    0107
    71
    0x47
    G
    大写字母G
    0100 1000
    0110
    72
    0x48
    H
    大写字母H
    0100 1001
    0111
    73
    0x49
    I
    大写字母I
    01001010
    0112
    74
    0x4A
    J
    大写字母J
    0100 1011
    0113
    75
    0x4B
    K
    大写字母K
    0100 1100
    0114
    76
    0x4C
    L
    大写字母L
    0100 1101
    0115
    77
    0x4D
    M
    大写字母M
    0100 1110
    0116
    78
    0x4E
    N
    大写字母N
    0100 1111
    0117
    79
    0x4F
    O
    大写字母O
    0101 0000
    0120
    80
    0x50
    P
    大写字母P
    0101 0001
    0121
    81
    0x51
    Q
    大写字母Q
    0101 0010
    0122
    82
    0x52
    R
    大写字母R
    0101 0011
    0123
    83
    0x53
    S
    大写字母S
    0101 0100
    0124
    84
    0x54
    T
    大写字母T
    0101 0101
    0125
    85
    0x55
    U
    大写字母U
    0101 0110
    0126
    86
    0x56
    V
    大写字母V
    0101 0111
    0127
    87
    0x57
    W
    大写字母W
    0101 1000
    0130
    88
    0x58
    X
    大写字母X
    0101 1001
    0131
    89
    0x59
    Y
    大写字母Y
    0101 1010
    0132
    90
    0x5A
    Z
    大写字母Z
    0101 1011
    0133
    91
    0x5B
    [
    开方括号
    0101 1100
    0134
    92
    0x5C
    反斜杠
    0101 1101
    0135
    93
    0x5D
    ]
    闭方括号
    0101 1110
    0136
    94
    0x5E
    ^
    脱字符
    0101 1111
    0137
    95
    0x5F
    _
    下划线
    0110 0000
    0140
    96
    0x60
    `
    开单引号
    0110 0001
    0141
    97
    0x61
    a
    小写字母a
    0110 0010
    0142
    98
    0x62
    b
    小写字母b
    0110 0011
    0143
    99
    0x63
    c
    小写字母c
    0110 0100
    0144
    100
    0x64
    d
    小写字母d
    0110 0101
    0145
    101
    0x65
    e
    小写字母e
    0110 0110
    0146
    102
    0x66
    f
    小写字母f
    0110 0111
    0147
    103
    0x67
    g
    小写字母g
    0110 1000
    0150
    104
    0x68
    h
    小写字母h
    0110 1001
    0151
    105
    0x69
    i
    小写字母i
    0110 1010
    0152
    106
    0x6A
    j
    小写字母j
    0110 1011
    0153
    107
    0x6B
    k
    小写字母k
    0110 1100
    0154
    108
    0x6C
    l
    小写字母l
    0110 1101
    0155
    109
    0x6D
    m
    小写字母m
    0110 1110
    0156
    110
    0x6E
    n
    小写字母n
    0110 1111
    0157
    111
    0x6F
    o
    小写字母o
    0111 0000
    0160
    112
    0x70
    p
    小写字母p
    0111 0001
    0161
    113
    0x71
    q
    小写字母q
    0111 0010
    0162
    114
    0x72
    r
    小写字母r
    0111 0011
    0163
    115
    0x73
    s
    小写字母s
    0111 0100
    0164
    116
    0x74
    t
    小写字母t
    0111 0101
    0165
    117
    0x75
    u
    小写字母u
    0111 0110
    0166
    118
    0x76
    v
    小写字母v
    0111 0111
    0167
    119
    0x77
    w
    小写字母w
    0111 1000
    0170
    120
    0x78
    x
    小写字母x
    0111 1001
    0171
    121
    0x79
    y
    小写字母y
    0111 1010
    0172
    122
    0x7A
    z
    小写字母z
    0111 1011
    0173
    123
    0x7B
    {
    开花括号
    0111 1100
    0174
    124
    0x7C
    |
    垂线
    0111 1101
    0175
    125
    0x7D
    }
    闭花括号
    0111 1110
    0176
    126
    0x7E
    ~
    波浪号
    0111 1111
    0177
    127
    0x7F
    DEL (delete)
    删除

    1 运行程序的三个核心硬件
    cpu
    内存
    硬盘

    任何一个程序要想运算,必须先由硬盘加在到内存,然后cocpu去内存存取执行
    运行着的应用程序产生的数据 必先存再内存

    2 python解释器运行的一个python文件(sss.py) 步骤
    1 将pythpn解释器的代码由硬盘读到内存
    2 讲xxx.py以普通文本文件形式读到内存
    3 python读取文件内容,识别python语法 执行相应操作
    ps 普通的文本编辑器与python解释器前两步都一样

    字符编字符编码针对的文字那也就意味着这里需要考虑视频文件 音频文件等其他文件吗? 不需要文本编辑器的输入和输出是两个结果
    人在操作计算机的时候,输入的是人能够看懂的字符,但是计算机智能识别010101这样的二进制数据,那么
    人输入的字符按照某一个东西 >>(字符编码表)>> 变成了二进制数字

    字符编码表就是字符与数字的对应关系
    a 0
    b 1
    a 00
    b 01
    c 11
    d 10

    ALCII码表 最上方的
    用八位二进制表示一个英文字符 所有英文字符+符号最多也就125 左右
    0000 0000
    1111 1111

    GBK
    用2个Bytes表示一个中文字符 还是用1个Bytes表示英文字符
    0000 0000 0000 0000
    1111 1111 1111 1111 最多能表示65535个字符

    基于上面的推导步骤,任何一个国家要想让计算机支持本国语言都必须自己创建一个字符编码
    日本人 shift_JIS
    韩国人 Euc-kr


    万国编码表 unicode
    统一用2个Bytes表示所有的字符

    a 0000 0000 0010 1010

    影响
    1 浪费内存空间
    2 io次数增加,程序运行效率降低(致命)

    当内存的中的unicode编码格式数据存到银盘的时候,会按照utf-8编码
    utf-8 unicode transfornmation format
    会将unicode的英文字符由原来的2Bytes变成1Bytes
    会将unicode中文字符由原来的2Bytes变成3Bytes

    现在的计算机
    内存都是unicode
    硬盘都是utf-8

    需要掌握
    unicode的两个特点(******)
    1 用户在输入的时候,无论什么字符都能够兼容万国字符
    2 其他国家编码的数据有由硬盘读到能存的时候unicode与其他各个国家的编码都有对应关系


    必须掌握(*********)
    数据由内存保存到硬盘
    1 内存中的unicode格式二进制数字 >>编码(enceode)>> utf-8格式的二进制数据

    硬盘中的数据由硬盘读到内存
    1 硬盘中的utf-8格式的二进制数据 >>解码(decode)>> 内存中unicode格式的二进制数据

    (******)
    保证不乱码的关键
    文本文件一什么编码编的就以什么编码解

    python2
    将py文件按照文本文件读入解释器中
    默认用ASCII码(因为在开发python2解释器的时候unicode还没有盛行)
    指定了文件头的话就用文件头的编码格式存储数据
    用python2写代码 中文字符前面要加u
    为了就是将oython2(当你不指定文件头的时候,默认使用ASCII存储数据,如果指定文件头,那么就以文件头的格式编码存储数据)
    x = u'你好'
    -----------------------------------------------------------------------------------------------
    python3
    默认使用utf-8编码

    文件头
    # coding: utf-8 冒号后面写什么编码就用什么编码读
    1 因为所有的编码都支持英文字符,所以文件头才能够正常生效
    # -*- coding: utf-8 -*- 两边的-*- 一点乱用没有 装饰

    python3默认是unicode格式

    补充
    1 pycharm终端用的的utf-8
    2 windows终端用的是GBK

    -----------------------------------------------------------------------------------------------
    总结:
    (*************) 这个必须会
    x = '上'
    res1 = x.encode('gbk') # 将unicode编码成可以存储和传输的utf-8的二进制数据
    print(res1) # b'xe4xb8x8a'
    # bytes类型 字节串类型 你就把它当成二进制数据即可
    res2 = res1.decode('gbk') # 将硬盘中的utf-8格式的二进制数据解码成unicode格式的二进制数据
    print(res2)

    鸡哥语录:不知道该怎么用 就两个试试 不是encode 就是decode

    乱码:存入的字符不能够正常显示 说明他们保存时候和输出编码不一致

    单位换算

    八位二进制也叫8bit
    8bit = 1Bytes
    1024Bytes = 1KB
    1024KB = 1MB
    1024MB = 1GB
    1024GB = 1TB
    1024TB = 1PB

    什么是文件
    操作系统提供给用户操作复杂硬件(硬盘)的简易的接口

    为什么要操作文件
    人或者应用程序需要永久的保存数据

    如何用
    with open(r'E:程序第二周a.txt',encoding='utf-8') as f: # f仅仅十个变量名,你把他看成一个遥控器
    print(f)
    print(f.read())

    文件的操作

    文件处理模式
    r 只读模式
    w 只写模式
    a 追加模式
    操作文件单位的方式
    t 文本文件 t模式在使用的时候需要指定encoding参数 如果不知道默认是操作系统的默认编码
    b 二进制 一定不能指定encoding参数



    文件打开模式
    r 只读模式
    w 只写模式
    a 追加模式
    
    
    r模式             打开文件的时候没有找到文件 直接报错   简写只能在同一个文件夹下才行
    文件路径可以写相对路径,但是需要注意该文件必须与执行文件在同一层文件下
    mode参数可以不写 不写的话默认是rt 只读的文本文件 t不写默认就是t
    with open(r'E:程序第二周a.txt',mode='r',encoding='utf-8') as a: # mode 默认不写是rt
    print(a.readable()) # 是否可读 True
    print(a.writable()) # 是否可写 False
    print(a.read()) # 一次性将文件内容全部读出

    打开图片
    with open(r'E:程序第二周1.jpg',mode='rb',) as a: # mode 默认不写是rt
    print(a.readable()) # 是否可读 True
    print(a.writable()) # 是否可写 False
    print(a.read()) # 一次性将文件内容全部读出

    x = '上'
    res = x.encode('utf_8') # 将unicode编码成可以存储和传输的utf-8的二进制数据
    print(res) # b'xe4xb8x8a' BytesL类型 字节串类型 把它当成二进制数据即可

    res1 = res.decode('utf-8') # 将硬盘中的utf-8格式的二进制数据解码成unicode格式的二进制
    print(res1) # 上

    鸡汤
    encode 不行就用 decode

    应用程序想要操作计算机硬件,必须通过操作系统来间接的操作

    打开一个文件
    通过python代码操作文件
    r 取消转义
    f = open(r'E:程序第二周a.txt') # 向操作系统发送请求 打开某个文件
    print(f) # f 是文件对象
    print(f.read()) # windows 操作系统默认的编码是gbk


    f = open(r'E:程序第二周a.txt',encoding='utf-8')
    print(f)
    print(f.read())
    f.read() # 向操作系统发请求,读取文件内容
    f.close() # 告诉操作系统 关闭打开的文件
    print(f)

    自动上下文操作

    with open(r'E:程序第二周a.txt',encoding='utf-8') as f: # f仅仅十个变量名,你把他看成一个遥控器
    print(f)
    print(f.read())

    打开多个文件
    with open(r'E:程序第二周a.txt',encoding='utf-8') as f ,
    open(r'E:程序第二周a.txt',encoding='utf-8') as f1:
    print(f)
    print(f.read())
    print(f1)
    print(f1.read())



    r模式打开文件注意
    with open(r'E:程序第二周a.txt',mode='r',encoding='utf-8') as a: # mode 默认不写是rt
    print(a.readable()) # 是否可读 True
    print(a.writable()) # 是否可写 False
    print('>>>1')
    print(a.read()) # 一次性将文件内容全部读出
    print('>>>2')
    print(a.read()) # 读完一次之后文件的光标已经在文件末尾了,再读就没有内容了
    print(a.readlines()) # 返回的是一个列表 一个一个列表内的元素对应的就是文件的一行行数据
    for i in a: # a 可以被for循环 没for循环一次 读一行内容
    print(i) # 这个方法可以解决大文件一次性读取占用内存过高的问题
    print(a.readline()) # 只读文件一行内容
    print(a.readline())
    print(a.readline())
    print(a.readline())


    w模式 w模式一定要慎用,会先清空
    1 文件不存在的情况下,自动创建该文件
    2 当文件存在的情况下 会将文件内容清空再写入
    with open(r'E:程序第二周.txt',mode='w',encoding='utf-8') as a: # mode 默认不写是rt
    print(a.readable()) # 是否可读 False
    print(a.writable()) # 是否可写 True
    print('>>>>') # 一次性将文件内容全部读出
    a.write('鸡哥说今天是个翻车的好日子,,,,, ')
    a.write('鸡哥说今天是个翻车的好日子,,,,, ')
    a.write('鸡哥说今天是个翻车的好日子,,,,, ')
    a.write('鸡哥说今天是个翻车的好日子,,,,, ')
    l = ['鸡哥说今天是个翻车的好日子 ,''鸡哥说今天是个好日子 ,']
    a.writelines(l)
    上下等价
    for i in l:
    a.write(i)


    a模式
    1 当文件不存在的情况下,自动创建文件
    2 当文件存在的情况下 不会清空文件内容,文件的光标会移动到文件最后
    with open(r'E:程序第二周c.txt',mode='a',encoding='utf-8') as a: # mode 默认不写是rt
    print(a.readable()) # 是否可读 F
    print(a.writable()) # 是否可写 T
    a.write('真理啊 ')
    a.write('真理啊')
  • 相关阅读:
    webgis笔记
    应用gis笔记
    专业程序设计part2
    计算机图形学笔记
    底层学习笔记(打开黑箱世界)
    语言甄别笔记
    使用C++输入一个包含空格的字符串,再输入单独的一个字符,找到这个字符串中当前字符的个数(注意不区分大小写)
    每日刷刷C语言之输入三个数找到最小值
    C语言实现字符串大小写转换
    C语言实现头插法
  • 原文地址:https://www.cnblogs.com/xuzhaolong/p/11139304.html
Copyright © 2020-2023  润新知