zoukankan      html  css  js  c++  java
  • Python基础Day8

    一、内容回顾

    列表的存储:列表里的元素存储的是值的内存地址,就算通过copy,复制后容器里的值也是指向同一个内存地址(跟驻留机制有关)

    l1 = [1,2,3,'a','b','c']        # 1438107378632
    l2 = l1.copy()                  # 1438107378760
    print(id(l1[-1]))               # 2374175266272
    print(id(l2[-1]))               # 2374175266272

     

    浅copy的类型:列表list,字典dict,集合set

    深copy的类型:所有数据类型(但字符串,整型,布尔值无意义,都是同一个内存地址)

     

    二、文件操作初识

    f = open('d:a.txt',encoding='utf-8',mode='r')
    # 'd:a.txt' 文件路径
    # encoding='utf-8 编码方式
    # mode='r' 操作方式(模式)

    open()   是python的内置函数,内部调用当前系统的系统命令

    f 是文件接收的变量,即文件句柄

    文件路径:分为绝对路径和相对路径

    绝对路径:从根目录             例如:d:aaaa.txt

    相对路径:从当前目录或者当前文件夹    例如: a.txt

    编码方式:utf-8,gbk,gb2312等

    操作方式:只读、只写、读写、写读、追加等

     

    操作步骤:

    ① 打开文件,产生文件句柄

    ② 对文件句柄进行操作

    ③ 关闭文件句柄

     

    报错:

    ① 编码不一致,存储文件时编码与打开文件时编码不一致

    ② 路径文件

    解决路径问题的方式:a 在文件路径前加r   例如:r'd:a.txt'

    b 所有的 都改为 \

     

    三、文件的读模式

    r     只读模式(只读)

    r+      读写模式(可读、可写)

    r+b    一般用于操作非文字类文件(文本文件),不建议操作文字类文件(可读、可写)

    rb    一般用于操作非文字类文件(文本文件),不建议操作文字类文件(只读)

     

    以文本模式打开时,只读(rt)模式下,open()函数做的操作:bytes ==> decode('utf-8') ==> str。

    只读模式下,mode='r 可以省略,因为open的函数默认的模式是mode='r'

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

     

    在读写模式下,先读后追加,无论怎么读都是在最后追加,因为读完以后指针在内容的最后位置。

    未读就写入,由于指针在最开始位置,写入时先覆盖前面的内容,写入多少覆盖多少

     

    文件操作模式中带b字母的,都是非文字类文件相关的(例如:图片、视频等),b是bytes模式,不需要加编码

     

    f = open('aa.jpg',mode='rb')

     

    读的常用方法:

    ① read()      # 全部内容读取

    f = open(r'd:a.txt',encoding='utf-8')
    str1 = f.read()
    print(str1)
    f.close()
    
    # 结果
    风急天高猿啸哀,渚清沙白鸟飞回。
    无边落木萧萧下,不尽长江滚滚来。
    万里悲秋常作客,百年多病独登台。
    艰难苦恨繁霜鬓,潦倒新停浊酒杯。

     

    ②  read(n)    按字符/字节的个数读取

    在r或者r+模式下,n指定的是字符个数。

    f = open(r'd:a.txt',encoding='utf-8')
    str1 = f.read(12)
    print(str1)
    f.close()
    
    # 结果
    风急天高猿啸哀,渚清沙        # 12个字符

     

    在rb模式下,n指定的是字节个数

    f = open(r'd:a.txt',mode='rb')
    str1 = f.read(12)
    print(str1)
    f.close()
    
    # 结果
    b'xefxbbxbfxe9xa3x8exe6x80xa5xe5xa4xa9'      # 12个字节

     

    ③ readline()    # 按行读取,只读一行

    f = open(r'd:a.txt',mode='r')
    str1 = f.readline()
    print(str1)
    f.close()
    
    # 结果
    风急天高猿啸哀,渚清沙白鸟飞回。

     

    ④ readlines()    # 逐行读取,返回一个列表

    f = open(r'd:a.txt',mode='r')
    lis = f.readlines()
    print(lis)
    f.close()
    
    # 结果
    ['风急天高猿啸哀,渚清沙白鸟飞回。
    ', '无边落木萧萧下,不尽长江滚滚来。
    ', '万里悲秋常作客,百年多病独登台。
    ', '艰难苦恨繁霜鬓,潦倒新停浊酒杯。']

     

    ⑤ for 循环

    f = open('d1.txt',encoding='utf-8')
    for line in f:
        print(line.strip())
    f.close()
    # 结果 风急天高猿啸哀,渚清沙白鸟飞回。 无边落木萧萧下,不尽长江滚滚来。 万里悲秋常作客,百年多病独登台。 艰难苦恨繁霜鬓,潦倒新停浊酒杯。

    机制:内存每次循环只读一条,读下一条的话,上一条就会消失。

     

    四、文件的写模式

    w     写模式(只写,不能读)

    w+      写读模式(可写、可读)

    w+b    一般用于操作非文字类文件(文本文件),不建议操作文字类文件(可写、可读)

    wb    一般用于操作非文字类文件(文本文件),不建议操作文字类文件(只写,不能读)

     

    只写(wt)模式下,open()函数做的操作:unicode ==> encode()

     

    f = open('d1.txt',encoding='utf-8',mode='w')
    f.write('aaa')
    f.close()

    ① 文件不存在,会创建文件再写入

    ② 文件已存在,先清空内容再写入

     

    复制文件:先读取文件内容,再一行一行写入另一个文件

    f_read = open('d1.txt',encoding='utf-8',mode='r')
    f_write = open('d2.txt',encoding='utf-8',mode='w')
    for line in f_read:
        f_write.write(line)
    f_read.close()
    f_write.close()

     

    w+ 写读模式,一般不推荐使用,写入后指针在最后,读不出内容,除非手动调整指针

     

    五、文件的追加写模式

    a      追加模式(可写、不可读)

    a+    可读可追加模式(可写、可读)

    ab    一般用于操作非文字类文件(文本文件),不建议操作文字类文件(可写、不可读)

    a+b    一般用于操作非文字类文件(文本文件),不建议操作文字类文件(可写、可读)

     

    f = open('d1.txt',mode='a',encoding='utf-8')
    f.write('666')
    f.close()

    ① 文件不存在,会创建文件再写入

    ② 文件已存在,将指针移至末尾再写入

     

    六、文件的其他方法

    readable()    # 判断文件是否可读

    writable()      # 判断文件是否可写

     

    seek()      # 指定指针的位置,按字节来调整指针

    f = open('d1.txt',encoding='utf-8')
    f.seek(3,0)                         # 指针从文件的绝对位置(开头)移动3个字节
    f.close()

    0  代表文件的开头, 1 代表当前位置, 2 代表文件末尾

     

    tell()        # 返回指针的当前位置,字节为单位。受seek、readline、read、readlines影响,不受truncate影响,

    truncate()       # 从开头截取按字节数截断,其中win下的换行代表2个字符大小。截断后的所有内容都会被删除。truncate()这个函数跟文件指针位置无关,所以只能在a+和r+的模式下使用。

     

    打开文件的另一种方式:

    with open() as f:

    with open('d1.txt',encoding='utf-8') as f:

     

    在一定时间内会自动关闭文件,也能同时开启多个文件句柄

    with open('d1.txt',encoding='utf-8') as f,open('d2.txt',mode='w',encoding='utf-8') as f1:

     

    七、文件的操作

    所有类型的文件修改都是此方式:

    ① 打开源文件,产生一个文件句柄(读模式)

    ② 创建一个新文件,产生一个文件句柄

    ③ 读取源文件内容,进行修改,并将修改后的写入到新文件

    ④ 将源文件删除

    ⑤ 将新文件重命名成源文件

    import os
    with open('d1.txt',encoding='utf-8') as f_read,open('d2.txt',mode='w',encoding='utf-8') as f_write:
        for line in f_read:
            f_write.write(line)
    
    os.remove('d1.txt')                             # 删除源文件
    os.rename('d2.txt','d1.txt')                    # 文件重命名

     

  • 相关阅读:
    谷歌浏览器慎用有道词典插件(<audio></audio>) (转载)
    Python函数-4 迭代器
    {v: k for k, v in myArray.items()}
    Python函数-3 推导式
    Java面向对象编程 -6.5
    Java面向对象编程 -6.8
    Java面向对象编程 -6.7
    Java面向对象编程 -6.6
    Java面向对象编程 -6.4
    Java面向对象编程 -6.3
  • 原文地址:https://www.cnblogs.com/st-st/p/9468317.html
Copyright © 2011-2022 走看看