• 第二章数据类型


    一、数字类型

      1.int类型:

        基本使用:

          用途:用于年龄,手机号,身份证号;

          定义:

            age=18;

        常用操作+内置方法:

          正常的运算赋值;

          进制转换:

            print(bin(3)); 把十进制3转换成二进制并输出,结果为0b11

            print(oct(8));把十进制8转换成八进制并输出,结果为0o10

            print(hex(16));把十进制16转换成十六进制并输出,结果为0x10

      2.float类型

        基本使用:

          用途:用于身高,体重,薪资;

          定义:

            heighe=1.81;

        常用操作+内置方法:

          正常的运算赋值;

      3.int和float类型总结:

        存一个值or多个值:

        只能存一个值;

        可变or不可变:

        不可变; (值变id不变为可变,值变id跟着变为不可变)

    二、字符串类型

      1基本使用:

        用途:描述性数据,用于名字,家庭住址,性别爱好;

        定义方式:在单引号/双引号/三引号中的字符,注意:三引号用于多段字符,单引号内可用双引号,双引号套单引号,但不能,单引号内套单,双套双;

          name='zhanglong'

        掌握:str(10),int('10')

          str能将整型10转换为字符串’10‘ ,而int只能讲字符串’10‘转换为整型10,不能讲字符串’a‘转换为整型;

      2.常用操作+内置方法:

        优先掌握的操作:

          1.安照索引取值:

            name='zhanglong' 

            print(name[0])   #从前往后取,索引第一位对应的是0

            结果为z;

            print(name[-1]) #从后往前取,索引第一位对应的是-1

            结果为g;

          2.切片(顾头不顾尾,步长)

            count='123456789'

            print(count[0:6:1]) 

            结果为:123456,0是开头,6是结尾,结尾不包括在内,也就是012345位,1是步长,走一步,0,再走1步,1;

            

            count='123456789'

            print(count[1:7:2])  

            结果为246,1是开头,对应的是2,走两步,23,输出4,走两步,45,输出6,7是结尾,不包括;

          3.长度len

            name='zhanglong'

            print(len(name))

            结果输出为9,也就是输出字符串的位数。

          4.成员运算in和not in

            in:在 

            not in:不在

            name='zhanglong'

            print('zhang' in name)

            结果为True,也就是字符串’zhang‘在字符串name中,自然是正确的

            name='zhanglong'

            print('zhang' not in name) 

            结果为False,也就是字符串’zhang‘不在字符串name中,自然是错误的;

          5.移除空白strip

            test='*****练习*****'

            print(test.strip('*'))

            输出结果为:练习,两边的*被strip清除了,如何没加字符,会清除空格

          6.切分split

            name='zhanglong:zhoahu:wangerma'

            print(name.split(':'))

            结果为:['zhanglong', 'zhoahu', 'wangerma']  字符串中统一的符号:被切除,并将其转换成列表模式输出,name并为被改边,只是结果改变,可以赋值个新的变量;

          7.循环

            name='zhanglong'

            i=0

            while i<len(name)

            print(name[i])

            i+=1;        

            用while循环 循环输出字符串中的字符;

            name='zhaohu'

            for ser in name:

              print(ser)

             用for循环,循环输出name的字符

    3月20日补充

        3.需要掌握的操作

          1.strip.rstrip.lstrip

            strip:去除字符两边的特殊符号;调用,字符串.strip(),()可以输入其他字符,不输入则清除空白,输入则清除其他值;

            rstrip:去除字符右边的特殊符号;调用,字符串.strip(),()可以输入其他字符,不输入则清除空白,输入则清除其他值;

            lstrip:去除字符左边的特殊符号;调用,字符串.strip(),()可以输入其他字符,不输入则清除空白,输入则清除其他值;

          2.lower.upper

            lower:将字符串全部转换为小写;调用,字符串.lower();

            upper:将字符串全部转换为大写;调用,字符串.upper();

          3.startswith.endswith

            startswith:判断字符串开头;调用,字符串.startswith(),()内输入你要判断的字符,输出为真,则输入字符是次字符串的开头;

            endswith:判断字符串结尾;调用,字符串endswith(),()内输入你要判断的字符,输出为真,则输入字符是次字符串的结尾;

          4.format的三种用法

            format:字符串格式化;:第一种用法,字符串.format(),字符串中加入{},()内输入值,用逗号,隔开,按顺序替换{};

            format:字符串格式化;:第二种用法,字符串.format(),字符串中加入{}并且在{}中加入索引,()内输入值,用逗号,隔开,按索引替换{};

            format:字符串格式化;:第一种用法,字符串.format(),字符串中加入{}并且在{}内输入值名,()内输入值名值=值,用逗号,隔开,按你输入的值名替换{};

          5.split.rsplit

            split:切分,把有规律的字符串中规律符号切分,得到列表;调用字符串.split(),()括号内输入规律符号,或者你想分割的符号,符号后用逗号隔开输入你想切分次数,不输入则全部切分;   rsplit:从右边切分,把有规律的字符串中规律符号切分,得到列表;调用字符串.split(),()括号内输入规律符号,或者你想分割的符号,符号后用逗号隔开输入你想切分次数,不输入则全部切分;

          6.join

            join:以某字符为连接把列表合成字符串; 调用:''.join(列表),join前输入你想要的连接符,不输入则空为连接符,()内输入需要连接的列表;

            注意:join方法传入的列表只能包含str类型的元素,也就是字符串类型的元素;

          7.replace

            replace:替换,把字符串中某些字符串替换成你想输入的字符串;调用:字符串.join(),()内第一个输入被替换的,第二个输入你想替换的字符串,第三个你想替换的个数,空为全部替换,输入内容用逗号隔开;

          8.isdigit

            isdigit:判断字符串内是否都是数字(不能判断小数);调用:字符串.isdigit.

            

        2.字符串类总结

          存一个值or存多个值

          存一个值;

          有序or无序

          有序

          可变or不可变

          不可变

     三、列表

      作用:多个爱好, 多个课程,多个女朋友等;

      定义:

        cmd=['abc','aoe','iwy']

        []内用逗号分隔多个元素,列表内元素无类型限制;

        或 l=list('abc') 用list创建列表,()内为列表的值

      常用操作+内置方法:

        优先掌握的操作:

        1、按索引存取值(正向存取+反向存取):即可改也可以取
        x=['a','b','c']
        print(x[0])
        x[0]='A'

        调用:列表名[],[]内放索引,则取出列表值,把新的列表值赋予列表名[索引],则更改其值   

        2、切片(顾头不顾尾,步长)
        stus=['alex','egon','wxx','yxx','lxx']

        print(stus[1:3])

        调用:列表名[],[]放三个值,第一个为头,第二个为尾,第三个为步长

        方式与字符串相同

        3、长度
        stus=['alex','egon','wxx','yxx','lxx']
        print(len(stus))

        调用:len(),()放列表名,输入的是列表的个数;

        4、成员运算in和not in
         stus=['alex','egon','wxx','yxx','lxx']
         print('alex' in stus)

        in==在,not in==不在

        5、追加
        stus=['alex','egon','wxx','yxx','lxx']
        stus.append('wupei')
        stus.append('peiqi')
        print(stus)

        调用:列表名.append();()内放入需要添加的值,添加永远只从后面添加;
        6、插入
        stus=['alex','egon','wxx','yxx','lxx']
        stus.insert(1,'艾利克斯')
        print(stus)

        调用:列表名.insert();()中第一位为列表索引,第二位为要插入的元素,以逗号分隔;

        7、删除
        stus=['alex','egon','wxx','yxx','lxx']
        del stus[1]
        print(stus)
        stus.remove('alex')
        print(stus)

        调用:列表名.remove(),()内为你要删除的元素;

          stus.pop(1)
        stus.pop() # 默认删除末尾
        print(stus)

        调用:列表名.pop(),()中为你需要删除的索引,不输入则默认删除索引;pop删除的元素可以赋值给别的变量;

        res1=stus.remove('alex') # 单纯的删除
         print(res1)
        res2=stus.pop(0) # 取走一个值
        print(res2)

        

        8、循环
        stus=['alex','egon','wxx','yxx','lxx']
        依赖索引
        i=0
        while i < len(stus):
        print(stus[i])
        i+=1

        循环输出;while;

        for i in range(len(stus)):
        print(i,stus[i])

        不依赖索引
        for item in stus:
        print(item)

        循环输出;for;
      补充for循环

        依赖索引for循环
        for i in range(0,5,2): #0 2 4
        print(i)
        for i in range(10):#默认从零起始
        print(i)

        for i in range(10,-2,-1):
        print(i)

      需要掌握的操作
        stus=['alex','egon','alex','wxx','yxx','lxx']

        print(stus.count('alex'))

        count:统计元素个数;用法:列表名.count(),()输入你想统计的元素

        stus.extend(['a','b','c'])
        print(stus)

        extend:增加多个元素; 调用:变量名.extend(),()输入[],再在内放入多个元素,也可以说直接增加一个列表的元素;  

        print(stus.index('alex',1,5))

        index:查找元素索引;调用:变量名.index();()可输入3个值,第一个为你要查找的元素,第二个为范围开头,第三个为范围结尾,不输入范围,从头查找;

        stus.reverse()
        print(stus)

        reverse:把整个列表倒过来;调用:变量名.reverse();

        l=[1,10,3,12]
        l.sort(reverse=True)
        print(l)

        sort:排序; 调用列表名.sort(),从小到大排序,()输入reverse=True,从大到小排序;(注意,只能排序数字字符)

         大前提:只能同类型直接比较大小,对于有索引值直接的比较是按照位置一一对应进行比较的
        s1='hello'
        s2='hf'
        print(s1 > s2)

        l1=[3,'a','b','c']
        l2=['xxx','d']
          print(l1 > l2)

        print('Z' > 'a')
        A-Za-z
          print('a' > 'B')

        字符串比大小,从第一位开始比,不同直接决定大小,相同向后排;小写字母到大写字母比较,小z为最大,大A 为最小;  

      补充for循环

        enumerate:输出索引与列表的值 ; 调用:enumerate(列表名);
        goods=['mac','apple','iphone','tesla']
        for i in range(len(goods)):   #根据列表长度,输入索引和列表值
        print(i,goods[i])

        print(enumerate(goods))

        for x,y in enumerate(goods): #x,y=[0, 'mac']   #用enumerate来输出索引和值
         print(x,y)

        s='hello'
        for x,y in enumerate(s): #0h 1e 2l 3l 4o  #用enumerate来输出索引和值
        print(x,y)

        s='hello'
        l=list()
        for item in s:
        print(item)
        l.append(item)
        print(l)
        list('hello')

        enumerate('hello') #(0, 'h') (1, 'e') ...
        for item in enumerate('hello'):
         print(item)
        res=list(enumerate('hello'))
        print(res)

      总结列表类型

      多值

      有序

      可变;

    四、元组  

      什么是元组:“元组就是一个不可变的列表”

      1.用途:存多个值,但是只有读的需求,没有改的需求
      强调:在元素个数相同的情况下,使用元组更加节省空间

      2 定义方式
        t=(1,2,3,4)     #t=tuple((1,2,3,4))

          print(id(t),type(t),t)

      3 常用操作+内置的方法
      优先掌握的操作:
      1、按索引取值(正向取+反向取):只能取
      2、切片(顾头不顾尾,步长)
        t=(1,2,3,4,5,6)
        print(t[1:4])

        print(tuple('hello'))   #创建一个元组b并输出
        for i in range(10000): #
        print(i)

        print(tuple(range(10000)))

      3、长度
      4、成员运算in和not in

      5、循环

          t=('a','b','c','c')
        print(t.index('a'))
            print(t.count('c'))


      该类型总结
        1 存多个值
        2 有序
        3 不可变

    五、字典  

      1 用途:以key:value的形式存多个值

      优点:存取都快,每一个值都有对应的key

      2 定义方式:{}内以逗号分隔多个元素,格式为key:value,
      其中key必须为不可变类型,value可以是任意类型
        dic={'x':1,'y':1,'x':1111} #dic=dict({'x':1,'y':1,'x':1111})
        print(dic)

        dic=dict(x=1,y=2,z=3)
        print(dic)


      3 常用操作+内置的方法
        优先掌握的操作:
        1、按key存取值:可存可取
        dic={'name':'egon'}
        dic['age']=10    #增加一个字典元素
        print(dic)
        dic['name']='EGON' #更改name的值 
        print(dic)

        dic['name']=dic['name'].upper()     #将name映射的值改为大写
        print(dic)

        2、长度len
        dic={'name':'egon','age':18}
        print(len(dic))

      3、成员运算in和not in:判断的字典的key

      4、删除
        dic={'name':'egon','age':18}
        del dic['name']     #删除一个值
        print(dic)
        res=dic.pop('name')      #pop 取走一个值
        print(res)
        print(dic)

        res=dic.pop('sex',None)  #取走一个没有的值 返回为空

        print(res)

      5、键keys(),值values(),键值对items()
        dic={'name':'egon','age':18}
        print(dic.keys())  #得出所有的键值
        print(dic.values()) #得出值

        print(dic.items()) #打印出所有的键值,小元组的方式,for循环可以打印出一个一个键值

      4、掌握的操作

        dic={'name':'egon','age':18} 
        print(dic.get('namexxxxxxxxxxx'))

        get:用get输出值,不在里面就返回空

        print(dic.popitem())

        popitem():随机弹出一个元组形式的键值对

        dic.setdefault()   

      setdefaul的用处:
      1、字典有中有key,则不修改,返回原key对应的原值
        dic={'name':'egon','age':18}
        res=dic.setdefault('name','EGON')
        print('返回值',res)
        print(dic)

      2、没有对应的key,则添加,返回添加的key对应的value
        dic={'age':18}         
        res=dic.setdefault('name','EGON')
        print('返回值',res)
        print(dic) #{'age': 18, 'name': 'EGON'}

        dic.update({'x':1,'age':19})
        update:更新,对与老字典来说,更新指的是,新字典中有而老字典中没有则添加,新有而老有,则覆盖

        print(dic)

        dic.fromkeys()
        fromkeys:快速创建一个字典;  

        print({}.fromkeys(['name','age','sex'],None))
        {'name':None,'age':None,'sex':None}

      循环字典:
        msg_dic={
        'apple':10,
        'tesla':100000,
        'mac':3000,
        'lenovo':30000,
        'chicken':10,
          }

        for key in msg_dic:
        print(key,msg_dic[key])

      总结
      1、存多个值
      2、无序
      3、可变
    六、集合

    用途
    1、 关系运算
    2、去重
        s1=set('hello')
        print(s1)      #

        l=['a','b',1,'a','a']
        print(list(set(l)))

        想去重还想保证原来的顺序:了解
        l = ['a', 'b', 1, 'a', 'a']
        l_new=[]
        s=set()

        for item in l:
        if item not in s:
        s.add(item) #s={'a','b',1}
        l_new.append(item) #l_new=['a','b',1]

      定义方式:在{}内用逗号分隔开一个个元素
      注意的问题
      1、集合内没有重复的元素
      2、集合的元素必须是不可变类型

        s={1,2,3,4,4,4,4,4,4,4,'a'} #s=set({1,2,3,4,'a'})
        print(id(s),type(s),s)

        s={[1,2,3],'aa'}

      常用操作与内置方法
        stus_linux={'alex','egon','张全蛋','李铁蛋','oldboy'}
        stus_python={'李二丫','wxx','liudehua','alex','egon'}

      既报名linux又报名python的学生:交集
        print(stus_linux & stus_python)
        print(stus_linux.intersection(stus_python))

      所有的学生:并集
        print(stus_linux | stus_python)
        print(stus_linux.union(stus_python))


      只报名linux,没有报名python的:差集
        print(stus_linux - stus_python)
        print(stus_linux.difference(stus_python))


        print(stus_python - stus_linux)
        print(stus_python.difference(stus_linux))

      没有同时报名两门课程的学生姓名:交叉补集
        print(stus_linux ^ stus_python)
        print(stus_linux.symmetric_difference(stus_python))

      优先掌握,循环取值
      长度len
      成员运算in和not in


      查看
        s1={1,'a','b','c','d'}
        for item in s1:
        print(item)

      增加
        s1={'a','b','c'}
        s1.add() # 一次添加一个值
        s1.add(4)
        print(s1)

        s1.update({3,4,5}) #一次添加多个值
        print(s1)

      删除
        s1.discard() ## 当删除的元素不存在的时候,不会报错
        s1.discard(4)
        print(s1)

        s1.remove() # 当删除的元素不存在的时候,报错
        s1.remove(4)

        s1.pop() #随机取走一个元素
        res=s1.pop()
        print(res)

      了解的方法

        s1={1,2,3}
        s2={1,2}
        s1=s1.difference(s2)
        print(s1)
        s1.difference_update(s2)
        print(s1)

        s1.isdisjoint() #如果两个集合没有交集则返回True
        s1={1,2,3}
        s2={4,5,6}
        print(s1.isdisjoint(s2))
        print(s2.isdisjoint(s1)) 

      了解的知识点
      父集:爹包含儿子
        s1={1,2,3}
        s2={1,2}
        print(s1.issubset(s2))
        print(s2.issubset(s1))
        print(s1.issuperset(s2))

        print(s1 > s2) # 代表s1包含s2,s1是s2父集
        print(s2 < s1) # s2是s1子集

        s3={1,2,3}
        s4={1,2,3}
        print(s3.issuperset(s4))
        print(s4.issuperset(s3))
        print(s3 == s4)
        print( s3 >= s4)
        print( s4 >= s3)

    七、字符编码  

      1、知识储备
        cpu
        内存
        硬盘
      2 文本编辑器存原理
        结论:在编写py的程序的时候,是没有语法的限制的,编辑的结果跟编写一个普通的文本文件是没有任何区别,只有把py程序交给python解释并且在运行的第三个阶段才有了
           语言意义
      3 python解释器执行python程序的原理
        python3 test.py
        第一阶段:先启动python解释器这个软件
        第二阶段:把test.py文件的内容读入内存
        第三阶段:解释执行,识别语法

      4 文本编辑器读原理

      5:什么是字符编码
        人类的字符----》翻译-------》数字
        翻译的过程必须遵循一个标准:字符与数字一一对应的关系
        这个标准称之为字符编码表

        ASCII
        8bit=1bytes,一个英文字符占用1字节

        GBK
        16bit=2bytes ,2个字节表示一个中文字符,1字节表示一个英文字符

        unicode(内存中固定的编码):
        16bit=2bytes,2个字节表示一个字符

        utf-8:Unicode Transformation Format
        1字节表示一个英文字符,3bytes表示一个中文字符

      保证不乱吗的核心就是:
        文件是以什么编码存的,就必须以该读取
        强调:我们能控制的只是存到硬盘上的编码


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

        文件头的作用:#coding:utf-8 是告诉python解释器,用我指定的字符编码

      6:执行python程序第三个阶段发生的事
        会识别python语法,定义的字符串类型又涉及到字符编码的概念
        x='上' #x=str('上')
        python2:
        字符串分为两种形式:
        x='上' #python2的str类型会按照文件头指定的编码来存‘上’

        python3:
        str:被存成了unicode

      7:转换
        unicode---编码encode--->gbk
        gbk------->解码decode---》unicode

        print(2**16-1)

      整片字符编码一定要记住:文件是以什么编码存的,就用什么编码读取 

    八、文件处理 

      1、打开文件
        f=open(r'文件的路径',mode='打开文件的模式',encoding='操作文件的字符编码')
        f=open(r'a.txt',mode='r')
        print(f)
      2、读/写

        read():只读,输出文件里的全部内容
        data=f.read() 
        print(data)
        del f
      3、关闭文件

        close() :关闭操作系统内的文件,回收操作系统的资源;
        f.close()  
        print(f)
        f.read()

        with:管理文件上下文操作,帮你打开文件,帮你关闭系统文件;还可连续管理多个文件定义过第一个文件后,用逗号定义第二个;

        with open(r'a.txt',mode='r') as f: # 打开一个文件
        print('===>')
        print(f.read())   #read 读取文件

        f1=open(r'a1.txt',mode='r')
        f2=open(r'a2.txt',mode='r')

        with open(r'a1.txt',mode='r') as f1,open('a2.txt',mode='r') as f2: #管理2个文件,
        print('===>')
        print(f1.read())
        print(f2.read())

      4.默认的打开文件的编码是:当前操作系统默认的编码,win:gbk,linux:utf-8 mac:utf-8

        encoding: 选择打开文件的编码;

        f=open('a.txt',mode='r',encoding='utf-8')   

        print(f.read())

        f.close() 

      5.文件默认的打开模式是t模式:文本模式

      6.操作文件的模式有三种:r,w,a

        r:默认的打开模式,只读模式
        注意:当文件不存在时,报错

        f=open('a.txt',mode='r',encoding='utf-8') #mode='rt'
        f.write('哈哈啊哈哈啊啊 啊啊123213213123 ') #抛出异常,不能写
        print(f.readable())  #判断这个文件是不是可读的 
        print('=============>1')  
        print(f.read())       #第一次打印
        print('=============>2')
        print(f.read())      #第二次打印,read是全部打印,所以第二次打印无效
        f.close()

        readline: 只读一行

        f=open('a.txt',mode='r',encoding='utf-8') #mode='rt'
        print(f.readline(),end='') # 读第一行

        print(f.readline(),end='') # 读第二行
        print(f.readline(),end='')  #读第三行
        f.close()

        readlines: 以 为分隔 把文件以列表的形式读出来
        f=open('a.txt',mode='r',encoding='utf-8') #mode='rt'
        print(f.readlines()) 
        f.close()    

        for line in f.readlines(): #循环文件不要使用该方式,因为在文件过大的情况下有可能会撑爆内存
        print(line,end='')

        with open('a.txt',encoding='utf-8') as f:
        for line in f:       #for循环输出f的值
        print(line,end='')  #去除换行

      w:只写模式
      注意
      1、当文件存在时,清空
      2、当文件不存在时,创建空文档

        print(f.writable())  #判断是否是可写模式

      write:写,用于往文件中写字符,注意不会自动换行,需要换行时请添加换行符

        f=open(r'a1.txt',mode='w',encoding='utf-8') #默认是wt
        f.write(‘第一行 第二行')   #写入第一行和第二行,用换行符隔开

      writelines:可以吧列表、元组写入文件

        f.writelines(['111111 ','222222 ','333333 '])  #把列表写入,要写换行符
        f.write('aaaa bbbb cccc ') #把字符串写入,区别就是,一个写入列表类,一个写入字符串类
        f.close()

      a:只追加写模式
      注意:
      在文件不存在时,创建空文件
      在文件存在时,光标直接跑到文件末尾

        f=open('access.log',mode='a',encoding='utf-8') # 追加模式,操作与方法与写模式相同 ,并且不可读

        f.readlines()     #报错 证明不可读

        f.write('5555555555555 ')  #可写

        f.close()

      7.文件的打开模式b模式
        强调:
        1、与t模式类似不能单独使用,必须是rb,wb,ab
        2、b模式下读写都是以bytes单位的
        3、b模式下一定不能指定encoding参数


        rb模式
        with open('1.jpg',mode='rb',) as f: # 打开文件一1
        data=f.read()     #读文件,数据赋予data
        print(data,)        #输出读的文件
        print(type(data))  #输出data的格式

        with open('db.txt',mode='rb',) as f:          #打开文件db
        data=f.read()                    # 赋值
        print(data.decode('utf-8')) #bytes-----unicode   #字符编码转换 因为用的是rb模式,date的值为二进制,解码后才能输出人类字符;
        print(type(data))                       #字符类型

      wb模式
        with open('b.txt',mode='wb') as f:    #用b模式只写打开b文件
        msg='你好啊,吴三炮'                 
        f.write(msg.encode('gbk'))    # 将msg编码成gbk模式写入 f


        with open('b.txt',mode='wb') as f:  #用b模式只写打开b文件
        msg='你好啊,吴三炮'
        f.write(msg.encode('utf-8'))        #将msg的值编码为utf-8模式写入f

        with open('b.txt',mode='rb') as f:  #用b模式只读打开b文件
        data=f.read()          
        print(type(data))        #测试data的类型
        print(data.decode('utf-8'))    #用utf-8将data解码


        with open('1.jpg',mode='rb') as f:  #用b模式只读打开图片1

        data=f.read()          
        print(type(data))        #测试类型
        print(data.decode('utf-8'))    # 用utf-8解码data

      ab模式

        用法与wb相同
        with open('b.txt',mode='ab') as f: #用b模式追加打开文件b
        f.write('你好'.encode('utf-8'))      #把'你好'用utf-8编码写入文件b

      8.可读可写模式(了解)
        r+t :读写模式,先读,然后可以写
        with open('b.txt','r+t',encoding='utf-8') as f:  #用读写模式打开b
        print(f.readable())      #判断是否可读
        print(f.writable())  #判断是否可写
        print(f.readline())       #读一行
        f.write(' 吴大炮你也号 ')  #写入
        w+t  写读模式,先写入,然后可以读

        a+t   追读模式,一样先写入,后读

        U :通用换行符  (已经废弃)


      9.修改文件方式一:
        1、先把文件内容全部读入内存
        2、然后在内存中完成修改
        3、再把修改后的结果覆盖写入原文件
        缺点:会在文件内容过大的情况下,占用过多的内存


        with open('user.txt',mode='r',encoding='utf-8') as f:  #只读打开文件
        data=f.read()
        data=data.replace('吴佩其','吴佩其[老男孩第二帅的人]') #置换方法,把吴佩琪换成,逗号后的字符串
        with open('user.txt',mode='w',encoding='utf-8') as f:   #只写方法打开文件
        f.write(data)                    #把刚刚我们置换好的值,写进去


      修改文件方式二:
        1、以读的方式打开原文件,以写的方式打开一个新文件

        2. 在老文件判断找出要修改的字符串修改,并写入新文件

        3.最后把老文件删除,并把新文件改名;

        import os                        #导入os 模块

        with open('user.txt',mode='rt',encoding='utf-8') as read_f,    #用只读的方式打开文件user

        open('user.txt.swap',mode='wt',encoding='utf-8') as write_f:   #用只写的方式打开一个新的文件 。

        for line in read_f:                     #for循环输出老文件里的内容
        if '吴佩其' in line:                     #判断要修改的在不在其中

        line=line.replace('吴佩其','吴佩其[老男汉特别特别的老]')    #在则修改,不在继续循环

        write_f.write(line)                      #不需要修改的写入老文件

        os.remove('user.txt')                    #删除文件

        os.rename('user.txt.swap','user.txt')             #改文件名;

       

     

      

  • 相关阅读:
    十七、Java基础之final
    十六、Java基础之super
    十五、Java基础之多态
    十四、Java基础之方法重写/覆盖
    十三、Java基础之单例模式
    十二、Java基础之继承
    十一、Java基础之static关键字
    十、Java基础之this介绍
    九、Java基础之参数传递(值传递)
    利用ResultFilter实现asp.net mvc3 页面静态化
  • 原文地址:https://www.cnblogs.com/yangli0504/p/8603031.html
Copyright © 2020-2023  润新知