• python 文件操作: 文件操作的函数, 模式及常用操作.


    1.文件操作的函数: open("文件名(路径)", mode = '模式', encoding = "字符集")

    2.模式: r , w , a , r+ , w+ , a+ , rb , wb , ab , r+b , w+b , a+b .

    3.常用的操作

    (1)光标(seek)

    (2)tell: 索取光标位置.

    (3)truncate: 截断文件

    4.修改文件

    一.文件操作的函数

    open(文件名(路径), mode = "模式" , encoding = "字符集")

    路径: 1.绝对路径,从磁盘根目录寻找 或者 从互联网上寻找一个路径(链接).

    f = open("e:/abc/李时珍的皮.txt",mode = 'r', encoding = "gbk")
    s = f.read()
    print(s)
    f.c'lose()

    2.相对路径(用的多),相当于当前程序所在的文件夹   ../表示上一层文件夹.

    f = open ("哈哈哈", mode = 'r', encoding = "utf-8")
    s = f.read()
    print(s)
    f.close()      # 如果没有这句话, 你在下面的程序中如果删除这个文件. 就会报错

    二.文件操作模式

    (1)  r模式: 读文件

    f = open("呵呵呵", mode = "r", encoding = "utf-8")
    for line in f:                 # 文件是一个可迭代对象
        print(line.strap())     #一行一行的处理数据
    lis = f.readline()
    print(lis)
    f.close()

    (2) w模式: 写文件

    带 w 的,只要你操作了,就会清空源文件.

    如果文件不存在,会自动创建文件.

    f = open("阿西吧", mode = "w", encoding = "utf-8")
    f.write("呀,养狗了没有?
    ")    #
     换行
    f.write("养狗了,思密达")
    f.flush()
    f.cliose()

    (3) a模式: 追加文件

    写的时候,换行需要手动控制   

    f = open("阿西吧", mode = "a", encoding = "utf-8")
    f = write("思密达?")
    f = write("思密达")
    f.flush()
    f.close()

    (4) rb, wb, ab模式: bytes 处理非文本文件      如果处理非文本文件, mode里有b的, encoding就不给了.

    f =open("c:/pdd骚猪.jpg", mode = "rb")   # 从C盘读出,   这里比能写encoding
    e =open("e:/pdd骚猪.jpg", mode = "wb")   # 写入E盘.
    for line in f;   # 从C盘读出   你不知道读了多少数据
        e.write(line)     #写入到E盘
    f.close()
    e.flush()
    e.close()

    (5) 带 + 的模式

    不论你读取了多少内容,光标在哪儿,写入的时候都是在结尾写入,除非上来就写入,这是写入在开头.

    最好用的读写同时存在的模式: r+  读写模式,先读后写, 写入在结尾处.   (深坑需谨慎)

    f = open("阿西吧", mode = "r+", encoding = "utf-8)
    s = f.read(3)    #读取3个字节
    print(s)
    f.write("不养了,送人了,思密达")   # 在句尾写入
    f.close()
    f = open("德云社", mode = "r+", encoding ="utf-8")
    f.write("葫芦娃")    # 先写入在句首
    s = f.read()
    print(s)
    f.read(2)
    print(s)                    #读取光标在句中
    f.write("还有何云伟")   # 写入还是在句尾
    f.cliose

    很少用的 w+ 读写模式,因为在写入时会清空文件中的源内容

    f = open("德云社", mode = "w+", encoding = "utf-8")
    f.write("小岳岳也要退出德云社")    #写完之后,光标在最后,  读取是没有内容的.
    f.seek(0)    #移动光标,移动到开头
    s = f.read()
    print("读取的内容是,"s)        #空内容
    f.flush()                             #刷新文件内容
    f.close()

    a+ 模式

    f =open("德云社", mode = "a+", encoding = "utf-8")
    f.write("我也要加入德云社")
    s = f.read()
    print(s)
    f.flush()
    f.close()

    r+b, w+b, a+b,极少用

    三.常用的操作

    1.光标(seek) *

        seek(0)  开头

        seek(0,2)   结尾

    2.tell(); 光标的位置

    3.truncate  截取文件

    f = open("阿西吧", mode = "r", encoding = "utf-8")
    for line in f:
        print(line.split())
    seek(0)                  #移动到开头
    for line in f:
        print(line.split())
    f.close
    f =open("阿西吧", mode = "r", encoding = "utf-8")
    f.seek(3)            #3byte  = i个中文
    s = f.read(1)       # 读取一个字符
        print(f.tell())     #光标在哪?
    f.close()

    seek(偏移量,位置)

    seek(0)  开头

    seek(0,2)  在末尾的偏移量是0,   末尾

    truncate  截取文件

    f = open("我嘞个去", mode = "w", encoding = "utf-8")
    f.write("试试就试试")
    f.seek(9)
    print(f.tell())    #从文件开头截取到光标位置
    f.truncte(12)    #如果给出参数,从头截取到参数位置.
    f.close()

    四.修改文件

    1.引入os模块

    2.打开目标文件, r

    3.打开文件副本, w

    4. 从 r 中读取内容进行修改,写到副本中

    5.删除源文件

    6.重命名副本

    例:#引入模块improt...打开目标文件

    f =open("alex昨天又去哪了", mode = "r", encoding = "utf-8")
    with open("alex昨天又去哪了", mode = "r", encoding = "utf-8") as f ,
            open("alex昨天又去哪了_副本", mode = "r", encoding = "utf-8") as f1:
            for line in f:
                line = line.replace("alex","帅B")
            f1.write(line)
    os.remove(
    "alex昨天又去干嘛了") os.rename("alex昨天又去干嘛了_副本","alex昨天又去干嘛了")

    例:   

     id,name,phone,car,home,salary

    1,alex,10086,特斯拉,于辛庄,5000000

    2,wusir,10010,五菱宏光,青年,400000

    3,taibai,10000,魔板单车,松兰堡,30000

    4,ritian,12345,小黄车,广东lis = []

    with open("2018-08-06.log", mode = "r", encoding = "utf-8") as f:
        first = f.readline().strip().split(",")
        for line in f:
            dic = {}   #每一行一个字典
            ls = line.strip().split(",")
            for i in range(len(first)):
                dic[first[i]] = ls[i]
            lis.append(dic)
    print(lis)
    #

    [{'id': '1', 'name': 'alex', 'phone': '10086', 'car': '特斯拉', 'home': '于辛庄', 'salary': '5000000'}, {'id': '2', 'name': 'wusir', 'phone': '10010', 'car': '五菱宏光', 'home': '青年', 'salary': '400000'}, {'id': '3', 'name': 'taibai', 'phone': '10000', 'car': '魔板单车', 'home': '松兰堡', 'salary': '30000'}, {'id': '4', 'name': 'ritian', 'phone': '12345', 'car': '小黄车', 'home': '广东', 'salary': '30000'}]




  • 相关阅读:
    vue : 无法加载文件 C:UsersXXXAppDataRoaming pmvue.ps1,因为在此系统上禁止运行脚本
    js全屏和退出全屏浏览器
    js 如何保存代码段并执行以及动态加载script
    计算年龄,精确到年月日
    js闭包问题
    构造函数和继承方法
    js 箭头函数不适用的场景
    获取一组数据的最大值和最小值
    地图
    json传输
  • 原文地址:https://www.cnblogs.com/qq1426794755/p/9432320.html
Copyright © 2020-2023  润新知