zoukankan      html  css  js  c++  java
  • python学习 day7 (3月8日)

    read()读出来了之后文件里就从之后开始  光标不知道在哪 

    编码的进阶:

    背景: 

      ASCII:英文字母,数字,特殊符号,------------>二进制的对应关系

         str:

            一个字符 --------------->一个字节

            a:0001 0000    

        Unicode :万国码:世界上所有文字的  

            1个字符------------》4个字节

            a:0001 00000001 00000001 00000001 0000

            中:0001 00000001 00000001 00000001 0000

        因为上面浪费     

        utf-8 : 至少使用一个

          a:一位映射的ASCII

          中:三位

        gbk:国标

          a:映射的ASCII

          中:三位

        1.不同的编码之间的0101011 是不能互相识别的

        2.网络传输,数据存储到磁盘,-------------->   01010101二进制,不能使用unicod的编码本去编译

        (Unicode) 四位 , 浪费的资源太多

        大背景:  python3X  版本

           str:它在  内存中的编码方式:Unicode   涵盖所有的文字

           但是  写入文件的内容,传输给别人的数据, 一般都是str的形式

        矛盾点: 传输 和 使用 。

        解决: 利用str 发送或者传输(转换,将unicodez转换成非U)----------->发送,传输

        int  

        

        bytes 数据类型

    Int

    Bool

    Str

    Bytes  数据类型 与str 几乎一模一样  方法全有基本

    List

    Dict

    Set

    Tuple

    英文:

    Str :

    在内存中的编码:Unicode

                  表现形式---à: ‘t’

    Bytes:在内存中的编码:非Unicode

                  表现形式--à:b‘t’

     编码:encode () 默认“utf-8”

    # str --------> utf-8  bytes
    s1 = 'a太白'
    # encode 默认 utf-8
    b1 = s1.encode()
    b1 = s1.encode('utf-8')
    print(b1)#b'axe5xa4xaaxe7x99xbd'
    # str --------> gbk  bytes
    s1 = 'a太白'
    b1 = s1.encode('gbk')
    print(b1)#b'axccxabxb0xd7'

    中文:

    Str :

    在内存中的编码:Unicode

                  表现形式---à: ‘t’

    Bytes:在内存中的编码:非Unicode

                  表现形式--à:b‘t’ 

    若只是英文的话可以,但是中文的话表示成16进制

     s1 = b'中国'

            ^

    SyntaxError: bytes can only contain ASCII literal characters.

    6个

    编码:

    Str(Unicode) ----->bytes(非Unicode)

    S1 = ‘a 太白’

    Encode 默认使用 utf-8

    B1 = s1.endcode(‘utf-8’)

    B1 = s1.endcode(‘gbk’)

     

    解码:

      Utf-8 bytes ------>str Unicode

    B3 =  b'axe5xa4xaaxe7x99xbd'

    S2 = b3.decode(‘utf-8’) 

    终极转换

    Utf-8  bytes   gbk bytes

           And gb2312   Utf-16 

     

    # 终极转换
    # utf-8 bytes --------> gbk  bytes
    b3 = b'axe5xa4xaaxe7x99xbd'
    # s = b3.decode()
    s = b3.decode('utf-8')
    print(s)
    b4 = s.encode('gbk')
    print(b4) #b'axccxabxb0xd7'

    对于 他们的英文 映射的英文的话可以

    互相转化 ,特殊情况

    读文件:(5+5)

     #__author : 'liuyang' 
    #date : 2019/3/8 0008
    f = open('G:path.txt',encoding='utf-8',mode='r')
    print(f.read())            # utf-8 是 读写 无论什么格式  而且  有的不对 无法编码
    #  f变量:f , f1 ,file , file_hander,fh ,f_h...文件句柄.
    '''
    open()python的内置函数,python提供的一个功能,
    底层调用的是操作系统的调用文件命令,接口
    windows : 编码: gbk (默认)(国标) 为什么用种问
                    (美国用ASCII码)
    linux ,mas : 编码是utf-8 .
    '''
    '''
    操作文件的流程:
    1,打开文件,产生一个文件句柄
    2,对文件句柄进行相应的操作(中间过程多)
    3.关闭文件句柄'''
    f.close()

     5文件的读:(r r+ rb r+b)

      r 操作:r 

    # read () 全读
    f1 = open('r模式' ,encoding='utf-8') # 默认是r模式
    print(f1.read())
    f1.close()
    
    #看他的数据类型
    f1 = open('r模式' ,encoding='utf-8') # 默认是r模式
    # content= f1.read()
    
    # print(content,type(content))  #字符
    # f1.close()
    读字节:
     # f1 = open('r模式' ,encoding='utf-8') # 默认是r模式
    # print(f1.read(3))
    # f1.close()

    读每行 和多行 列表(字符串存储)

    print(f1.readline())
    print(f1.readline().strip()) # 有换行符 去strip()
    # print(f1.readline())
    print(f1.readlines())   #剩余的 ! 前面也是。 返回一个列表()
                            # 列表的每一个元素 是 字符
    f1.close()'''
    读大文件的方法:
    #  5  循环读取
    f1 = open('r模式',encoding='utf-8')
    for line in f1:
        print(line)
    print(line)
    #  在内存之中 只出现 一次 然后显示给显示器
    #  下一次 释放了
    f1.close()

    # w w+ wb w+b
    # 没有文件 创建文件写入内容 (写了个 w 模式的文件)
    f  = open('w模式',encoding='utf-8',mode='w')
    f.write('随便写一点')
    f.close()

     先清空后写
    f.write('abcdefgh')  # 没空格  一直写
    f.write('abcdefgh
    ')
    f.write('abcdefgh')
    f.write('abcdefgh')
    f.write('abcdefgh
    ')
    for i in range(3):
        f.write('abcdefgh
    ')
    f.close()

    文件的读写与输出  复制 粘贴

    # wb
    f1 = open('image.jpg',mode='rb')
    content = f1.read()
    f1.close()# 产生了数据 关不关 不影响
    f2 = open('image1.jpg',mode='wb')
    f2.write(content)
    f2.close()

    image.jpg-----------------> image1.jpg

    追加:

    # a 模式 追加 文件的追加
    # a ab a+ a+b
    # a 没有文件 ,创建文件,写入内容
    f = open('a模式',encoding='utf-8',mode='a') f.write('6666') f.close()# 不close() 一直在内存占着 网站开着 以后一直占用

    # 先读后写  和追加的区别是什么  可以写进去但是不显示 
    f1 = open('r模式',encoding='utf-8',mode='r+')
    print(f1.read())
    # f1.seek()
    f1.write('1')
    f1.close() #

    r+   先写后读   先读后写 

    #  r+ 先读后写  加到最后  
    # f = open('r模式',encoding='utf-8',mode='r+')
    # content = f.read()
    # print(content)
    # f.write('dsdjal')
    # f.close()
    # 先写后读   光标  先写 会替换掉  
    f = open('r模式',encoding='utf-8',mode='r+')
    f.write('dlaonanhail')
    content = f.read()
    print(content)
    f.close()
    print(f)   # 读入的没有写出  还有替换被write 前面的
    #第一种 规范代码
    # 第二种 把光标放最前面
    f1 = open('r模式',encoding='utf-8',mode='r+')
    f1.write('111sss1')
    # f1.flush()
    f1.seek(0)
    a = f1.read()
    print(a)
    f1.close()
    # 经常用到的 # r r+ w a # 网络 :rb wb

    文件描述符 , 强制保存
    f1 = open('r模式',encoding='utf-8') # 默认是读操作
    # print(f1.read())
    print(f1.fileno()) # 文件描述符
    f1.close()
    f2 = open('其他操作方法',encoding='utf-8',mode='w')
    f2.write('aldjlajll')
    # f1.flush()#  强制保存
    f1.close()
    
    

    writeable readable  

    f3 = open('r模式',encoding='utf-8') # 默认是读操作
    print(f3.readable())
    f3.close()
    # readable  writeable 判断文件句柄是否可读 可写
    if f3.writable():
        f3.write('12222')
    f3.close()

    seek 的光标 不改变 tr 的截取  截取从头开始 到 字节 处 

    #  网络编程 : FTP的作业,断电续传的功能
    #  seek  tell              断了之后 获取光标的位置 下次下的时候在此调整到这
    
    f1 = open('r模式',encoding='utf-8') # 默认是读操作
    f1.seek(9)     # 默认字节 之后
    print(f1.read())
    print(f1.tell())#  获取光标的位置
    f1.close()

    truncate

    f1 = open('w模式',encoding='utf-8',mode='w') # 默认是读操作
    f1.write('wwajfaldjakgjdlajglajdg')
    print(f1)
    f1.close()
    # truncate # 对源文件进行截取
    # 它 必须在可写的情况下适用  a(追加) w r+(读写)  都可写
    f1 = open('w模式',encoding='utf-8',mode='r+') # 默认是读操作
    #  从开始截9个  只剩下 9个字节
    print(f1.truncate(1))
    #  seek 不好使  r模式下 是字符  rb 模式下是字节!
    # f1 = open('r',encoding='utf-8',mode='rb')
    # a = f1.read()
    # print(a)
    # f1.close()
    # 最常用的几个方法 read  seek tell flush readable writeable
    # open close 都得写

    # 有些时候不需要 写close()
    # 一个with 语句可以操作多个文件
    # 他是检查 是否操作完 然后 关闭 有时间间隔
    # 打开文件的第二种方式
    with open('其他操作方法',encoding='utf-8') as f1, 
            open('r模式',encoding='utf-8',mode='w') as f2:
        #付给 f1
        print(f1.read())
        f2.write('da爱活动公交偶就FFljdkj')
        print(f2.write('sjdiasjidj'))  ## 写了多少位 14
    # 有些时候不需要 写close()
    # 一个with 语句可以操作多个文件
    # 他是检查 是否操作完 然后 关闭 有时间间隔
    #缺点:with open as 主动关闭 检查
    with open('其他操作方法',encoding='utf-8') as f1:
        print(f1.read())
        # 在打开  的过程中  可能会关闭  然后报错IOErrorr
        with open('其他操作方法',encoding='utf-8') as f2:
            pass

    09 文件的改      文件的改只能采取这种方法把,不能在一个文件里先读后改 只能通过一个中介在同一个文件里写错误 可以追加

    1.以读的模式打开源文件

    2.以写的模式创建一个新文件

    3.将源文件内容读取出来,按照你的要求改成新内容,写入新内容,

    4.删除原文件

    5.将新文件重命名成原文件

    import os
    with open('amoshi ',encoding='utf-8'
                             ) as f1 ,
        open('a模式',encoding='utf-8',mode='w')
        as f2:

        #low 版 内存太大的操作不了
    # old_content = f1.read() # new_content = old_content.replace('alex','sb') # f2.write(new_content)

    for old_line in f1: new_line = old_line.replace('sb','alex')# 有就改 没有也不报错 f2.write(new_line) #字符串操作 # 4.删除原文件 os.remove('amoshi ') #5.将新文件重命名成原文件''' # python相同目录下 os.rename('a模式','amoshi ')

     浅copy   一个代码块和两个代码块一样     深浅copy   在于  可变的不一样  共用的没区别

    深copy

    #__author : 'liuyang' 
    #date : 2019/3/8 0008
    '''
    09 文件的改

    1.以读的模式打开源文件 open r

    2.以写的模式创建一个新文件 w

    3.将源文件内容读取出来,按照你的要求改成新内容,写入新内容,
    a = old b = replace()

    4.删除原文件

    5.将新文件重命名成原文件'''
    # low 版
    '''
    import os
    with open('amoshi ',encoding='utf-8') as f1 ,
    open('a模式',encoding='utf-8',mode='w')as f2:
    # old_content = f1.read()
    # new_content = old_content.replace('alex','sb')
    # f2.write(new_content)
    for old_line in f1:
    new_line = old_line.replace('sb','alex')# 有就改 没有也不报错
    f2.write(new_line)
    #字符串操作
    # 4.删除原文件
    os.remove('amoshi ')
    #5.将新文件重命名成原文件 # python相同目录下
    os.rename('a模式','amoshi ')
    '''
    # f = open('amoshi',encoding='utf-8',mode='r')
    # a=f.read()
    # f1=open('a' ,encoding='utf-8',mode='w')
    # f =a.replace('alex','sb')
    # f.close()
    # f1.close()
    # 不行

    # 深浅 copy
    # 赋值运算 变量指的是同一个
    l1 = [1,2,3,[11,22]]
    l2 = l1 # 鲁迅 = 周树人
    # 共用一个
    # 元组的列表也可以
    l2.append(666)
    l2[-2].append(666)
    print(l1)
    print(l2)

    # 浅 copy # 面试题考的较多 深浅copy
    #copy 复制,浅浅的复制一份
    # lisT dict set 都可以
    l1 = [1,2,3,[11,22]]
    l2 =l1.copy()

    # 只是copy了一个列表 元素还是沿用了之前的元素
    # copy 了一个外壳

    # 整容 成一样的了 但是不一样人
    print(id(l1))
    print(id(l2))
    # 内存地址不一样

    # 元素内存地址一样
    print(id(l1[0]))
    print(id(l2[0]))
    # l1 变 l2 不变 内存里的两个
    l1.append(666)
    print('前:',l1)
    print(l2)

    #
    l1[-2].append(22)
    print(l1)
    print(l2)
    # 浅 copy: 复制一个外壳(列表),
    #但是列表里面的所有元素,都共用一个。
    # 深copy:深深的复制一下
    import copy
    l1 = [1,2,3,[11,22]]
    l2 = copy.deepcopy(l1)
    print(id(l1),id(l2))
    # 不可变数据类型 共用 指向同一个
    print(id(l1[0]))
    print(id(l2[0]))

    # 可变的数据类型 不共用一个
    print(id(l1[-1]))#43439688
    print(id(l2[-1]))#43378888

    # 不改变
    l1[-1].append(222)
    print(l1)
    print(l2)
    # 深copy:同一个代码块不同代码块
    #不仅创建一个


    # 浅copy 只 copy 一个外壳
    # 其它的内容全部共用

     

    # 下周一 上午 总结知识点
    #(知识点,带着做题)
    # 晚上考试
    写文件  和 追加 文件  'w'和 ‘a’  没有文件创建一个新文件
    with open('wenjian' , 'w' , encoding='utf-8')
    with open('wenjian' , 'a' , encoding='utf-8')
  • 相关阅读:
    Data Base mysql备份与恢复
    java 乱码问题解决方案
    【知识强化】第二章 物理层 2.1 通信基础
    【知识强化】第二章 进程管理 2.2 处理机调度
    【知识强化】第二章 进程管理 2.1 进程与线程
    【知识强化】第一章 操作系统概述 1.3 操作系统的运行环境
    【知识强化】第一章 网络体系结构 1.1 数据结构的基本概念
    【知识强化】第一章 网络体系结构 1.2 计算机网络体系结构与参考模型
    【知识强化】第一章 网络体系结构 1.1 计算机网络概述
    【知识强化】第一章 操作系统概述 1.1 操作系统的基本概念
  • 原文地址:https://www.cnblogs.com/Doner/p/10494318.html
Copyright © 2011-2022 走看看