美文网首页
05_Python文件操作_全栈开发学习笔记

05_Python文件操作_全栈开发学习笔记

作者: 豆行僧 | 来源:发表于2018-10-11 08:16 被阅读0次

    1. 文件:只读

    1.1 r

    r,只读模式【默认模式,文件必须存在,不存在则抛出异常】
    范例1:
    绝对路径

    f = open("d:\模特主妇护士班主任.txt",mode="r",encoding="utf-8")
    content = f.read()
    print(content)
    f.close
    

    执行结果:

    我头上有犄角,我头上有尾巴。
    

    范例2:
    相对路径

    f = open("模特主妇护士班主任",mode="r",encoding="utf-8")
    content = f.read()
    print(content)
    f.close
    

    执行结果

    这里是相对路径
    

    1.2 rb

    rb,对于非文本文件,我们只能使用b模式,"b"表示以字节的方式操作(而所有文件也都是以字节的形式存储的,使用这种模式无需考虑文本文件的字符编码、图片文件的jgp格式、视频文件的avi格式)
    范例:

    f = open("模特主妇护士班主任",mode="rb")
    content = f.read()
    print(content)
    f.close
    

    执行结果

    b'\xe8\xbf\x99\xe9\x87\x8c\xe6\x98\xaf\xe7\x9b\xb8\xe5\xaf\xb9\xe8\xb7\xaf\xe5\xbe\x84'
    

    2. 文件:只写

    2.1 w

    w,只写模式【不可读;不存在则创建;存在则清空内容】
    范例1:对于w:没有此文件就会创建文件

    f = open("log",mode="w",encoding="utf-8")
    f.write("2018世界杯")
    f.close
    

    范例2:先将源文件的内容全部清除,再写。

    f = open("log",mode="w",encoding="utf-8")
    f.write("2022世界杯")
    f.close
    

    执行结果:

    2022世界杯
    

    2.2 wb

    范例:

    f = open("log",mode="wb")
    f.write("2018SIFF".encode("utf-8"))    # 此时的 encode 是将str(unicode)转换成bytes(utf-8或GBK)类型
    f.close
    

    执行结果:

    2018SIFF
    

    3. 文件:追加

    3.1 a

    a, 只追加写模式【不可读;不存在则创建;存在则只追加内容】
    范例:

    f = open("log",mode="a",encoding="utf-8")
    f.write("素还真")
    f.close
    

    执行结果

    2018SIFF素还真
    

    3.2 ab

    范例:

    f = open("log",mode="ab")
    f.write("霸王丸".encode("utf-8"))    # 此时的 encode 是将str(unicode)转换成bytes(utf-8或GBK)类型
    f.close
    

    执行结果

    2018SIFF素还真霸王丸
    

    4. 文件:读写

    4.1 r+(常用,可不考虑写内容)

    r+, 读写【可读,可写】(如果先写再读,原内容就会被覆盖)
    范例:

    f = open("log",mode="r+",encoding="utf-8")
    print(f.read())
    f.write("牙神幻侍郎")
    f.close
    

    执行结果

    2018SIFF素还真霸王丸牙神幻侍郎
    

    4.2 r+b

    以bytes类型操作的读写
    范例:

    f = open("log",mode="r+b")
    print(f.read())
    f.write("不知火".encode("utf-8"))
    f.close
    

    执行结果

    2018SIFF素还真霸王丸牙神幻侍郎不知火
    

    5. 文件:写读

    5.1 w+(不常用)

    w+,写读【可写,可读】(原有内容会先删除,再写入)
    范例:

    f = open("log",mode="w+",encoding="utf-8")
    f.write("红疯与白疯")
    f.seek(0)    # seek() 将光标跳到第一个位置
    print(f.read())
    f.close
    

    执行结果

    红疯与白疯
    

    6. 文件:追加读

    6.1 a+

    a+, 写(追加)读【可写,可读】

    范例:

    f = open("log",mode="a+",encoding="utf-8")
    f.write("街头霸王")
    f.seek(0)
    print(f.read())
    f.close
    

    执行结果

    红疯与白疯街头霸王
    

    7. 文件操作的功能详解

    演示文件的内容:abcdefghijklmn

    1. read(3)
      a. 文件打开方式为文本模式时,代表读取3个字符
      b. 文件打开方式为b模式时,代表读取3个字节
      范例1(英文):
    # log文件内容为:abcdefghijklmn
    
    f = open("log",mode="r+",encoding="utf-8")
    content = f.read(3)
    print(content)
    f.close
    

    执行结果

    abc
    

    范例2(中文):

    # log文件内容为:我头上有犄角
    
    f = open("log",mode="r+",encoding="utf-8")
    content = f.read(3)
    print(content)
    f.close
    

    执行结果

    我头上
    
    1. seek()
      按照字节定的光标位置。utf-8的一个中文为3个字节
      范例1(英文):
    # log文件内容为:abcdefghijklmn
    
    f = open("log",mode="r+",encoding="utf-8")
    f.seek(3)
    content = f.read(3)
    print(content)
    f.close
    

    执行结果

    defghijklmn
    

    范例2(中文):

    # log文件内容为:我头上有犄角
    
    f = open("log",mode="r+",encoding="utf-8")
    f.seek(3)
    content = f.read()
    print(content)
    f.close
    

    执行结果

    头上有犄角
    
    1. tell()
      告诉你光标的位置
      范例1:
    # log文件内容为:我头上有犄角
    
    f = open("log",mode="r+",encoding="utf-8")
    f.seek(3)
    print(f.tell())
    f.close
    

    执行结果

    3
    

    范例2:

    # log文件内容为:我头上有犄角
    
    f = open("log",mode="a+",encoding="utf-8")
    f.write("他是小龙人")
    count = f.tell()    # 此时光标肯定是最后一位
    f.seek(count - 9)    # 将光标移到最后第三位字符,使其只显示小龙人
    print(f.read())
    f.close
    

    执行结果

    小龙人
    

    范例3:

    # log文件内容为:我头上有犄角
    
    f = open("log",mode="a+",encoding="utf-8")
    f.write("他是小龙人")
    count = f.tell()
    f.seek(count - 9)
    print(f.read(2))    # 只显示两个字符
    f.close
    

    执行结果

    小龙
    
    1. readable()
      是否可读。返回的是True与False。用不到
    1. readline()
      一行一行的读
      范例:
    # log文件内容为:
    附近的人,二哥,春哥,咸鱼哥,班长
    第二行:附近的人,二哥,春哥,咸鱼哥,班长
    
    f = open("log",mode="r+",encoding="utf-8")
    line = f.readline()
    print(line)
    f.close
    

    执行结果:

    附近的人,二哥,春哥,咸鱼哥,班长
    
    1. truncate()
      截取一段的读(对原文件进行截取)
      范例1:
    # log文件内容为:abcdefghijklmn
    
    f = open("log",mode="r+",encoding="utf-8")
    f.truncate(5)
    print(f.read())
    f.close
    

    执行结果

    abcde
    
    1. writable()
      是否可写。返回的是True与False。用不到
    1. readlines()
      每一行当成列表中的一个元素,添加到list中
      范例1:
    # log文件内容为:
    附近的人,二哥,春哥,咸鱼哥,班长
    第二行:附近的人,二哥,春哥,咸鱼哥,班长
    
    f = open("log",mode="r+",encoding="utf-8")
    line = f.readlines()
    print(line)
    f.close
    

    执行结果:

    ['附近的人,二哥,春哥,咸鱼哥,班长\n', '第二行:附近的人,二哥,春哥,咸鱼哥,班长']
    

    8. 文件操作的小知识点

    1. 循环读取文件
      范例:
    # log文件内容为:
    第一行
    第二行
    第三行
    第四行
    
    f = open("log",mode="r+",encoding="utf-8")
    for line in f:
        print(line)
    f.close
    

    执行结果

    第一行
    
    第二行
    
    第三行
    
    第四行
    
    1. 第二种方式读取文件(因为该方式最后自动关闭文件,所以最后无需写close)
      范例1:
      打开一个文件
    # log文件内容为:
    第一行
    第二行
    第三行
    第四行
    
    with open("log",mode="r+",encoding="utf-8") as obj:
        print(obj.read())
    

    执行结果

    第一行
    第二行
    第三行
    第四行
    

    范例2:
    同时打开多个文件

    with open('log',mode='r+',encoding='utf-8') as f,\
         open('log',mode='w+',encoding='utf-8') as f1:
    

    9. 修改文件(变相方式)

    范例:

    # log文件内容为:
    # 校长:豪鬼
    # 班主任:霸王丸
    
    with open("log",mode="r",encoding="utf-8") as f1,open("log.bak",mode="w",encoding="utf-8") as f2:
        for line in f1:
            if "霸王丸" in line:    # 班主任:霸王丸
                line = line.replace("霸王丸","牙神幻十郎")    # 霸王丸换成牙神幻十郎
            f2.write(line)    # 写文件到log.bak
    
    import os
    os.remove("log")    # 删除文件
    os.rename("log.bak","log")    # 重命名文件
    

    执行结果:

    # log文件内容变成了如下内容
    校长:豪鬼
    班主任:牙神幻十郎
    

    相关文章

      网友评论

          本文标题:05_Python文件操作_全栈开发学习笔记

          本文链接:https://www.haomeiwen.com/subject/euuvaftx.html