zoukankan      html  css  js  c++  java
  • day 08 文件操作

    文件操作  - >open()  打开
    f = open(文件路径,mode='模式',encoding='编码格式') 最最底层操作的是bytes,打开一个文件的时候获取到的是一个文件的句柄
    从文件中读取数据
    f.read()  读取文档的内容
    f.close()  关闭连接
    f.flush()  刷新管道,把数据写入文件
    f = open("alex和wusir的故事", mode="r", encoding="utf-8")
    # 读取内容    #####首先新建一个文件,文本的名称是什么就是什么
    content = f.read()  # 全部都读取出来
    print(content)
    # 坑:
    c2 = f.read() # 读取不到内容. 因为上面已经读取完毕. 光标在末尾
    print("c2", c2)
    如果你打开的文档不是在py里面建立的,直接打开文档的路径,但是要注意的是,这个文档编码的格式是"gbk"
    f = open("E:西游记金角大王吧.txt", mode="r", encoding="gbk")
    print(f.read())
    f.close()
    文件的路径:
    1.相对路径: 相对于当前程序所在的文件夹,如果在文件夹内,随便找,直接写名字;                      如果不在这个文件夹内,可能需要出文件夹或者进文件夹
                       ../  出文件夹
                       /   进文件夹:  文件夹/
    2.绝对路径:从磁盘根目录寻找路径(有问题)
             只有在记录日志的时候可以用到绝对路径
    日志: 程序运行过程中记录的信息
    mode:
    r  read  只读,读取
       读取文件的相关操作:
       1.read()  默认读取文件内容(全部)
       2. read(n) 读取n个字符
    f = open('你喜欢的游戏', mode='r', encoding='utf-8')
    print(f.read(3))  #读取3个字符
    print(f.read(3))  #继续读3个字符
    # 你喜欢
    # # 的游戏
    print(f.readline().strip()) # 换行符为分割, strip()可以去掉换行. 读取到的内容第一件事就是去掉空白
    print(f.readline()) # 换行符为分割
    扩展:
    print("周润发", end="胡辣汤")    end 在最后添加内容并添加到新的一行
    print("周星驰")    ##周润发胡辣汤周星驰
       3. readline()   读取一行 
       4. readlins()     读取全部,返回列表,一次性把文件中的读取出来
    print("你叫什么名字? 我叫李嘉诚. 可能") #  换行
    print("你叫什么名字?\n 我叫李嘉诚. 可能") #  显示
    print("你叫什么名字?\\n 我叫李嘉诚. 可能") #  显示 \n
       5.  for line in f:   每次读取一行内容
          文件句柄是一个可迭代对象
          #优点:相对节省内存
    for line in f:    ####从文件中读取到每一行给前面的line
      print(line.steip())
    f.close()
    w   写如,只写
    创建文件
    清空文件
    每次用w模式打开文件,都会清空这个文件(坑)
    次用w模式打开文件, 都会清空这个文件(坑)
    f = open('胡辣汤', mode="w", encoding="utf-8") # 可以帮我们创建文件
     
    f.write('河南特色 ')
    f.write("东北特色 ")
    f.write('陕西特色 ')
     
    # 好习惯
    f.flush()  # 刷新管道, 把数据写入文件
    f.close()
    a    
    也可以创建文件
    apppend() 追加,在文件的末尾写入内容
    f = open("葫芦小金刚", mode="a", encoding="utf-8") # a, append 追加, 在文件的末尾写入内容 f.write("你叫什么名字啊?")
    f.read() # not readable
    f.flush()
    f.close()
    r+ :  读写操作   对于文件而言.应该有的操作就是两个: 读,写
    不论读取内容的多少,只要你读了,写就是在末尾
    f = open("你喜欢的游戏", mode="r+", encoding="utf-8")
    content = f.read(2)  # 顺序必须先读, 后写
    print(content)   #你喜
    r+特有的深坑:不论读取内容的多少. 只要你读了. 写就是在末尾
    f.write('五娃')
    f.flush()
    f.close()
    print(f)
    w+ : 写读操作  ,一上来就会清空文件,很少人用
    一上来会清空文件. 没人用
    f = open("葫芦小金刚", mode="w+", encoding="utf-8")
    # content = f.read(2)  # 顺序必须先读, 后写
    # # r+特有的深坑:不论读取内容的多少. 只要你读了. 写就是在末尾
    f.write('五娃')
    f.write("又能吐火的, 有能吐水的.")
    # # 移动光标
    f.seek(0) # 移动到开头
    s = f.read()
    print("=========>", s)
     移动光标    f.seek(0) 移动到开头
    a+ :   追加写读 ,光标在末尾.所有的写都是在末尾
    # 追加写读, 光标在末尾. 所有的写都是在末尾
    f = open("葫芦小金刚", mode="a+", encoding="utf-8")
    f.write("机器葫芦娃召唤神龙, 高喊.我代表月亮消灭你!")
    f.seek(0)
    s = f.read()
    print("=========>", s)
    所有带b的表示直接操作bytes,档处理非文本文件的时候
    rb
    wb
    f1 = open("c:/huyifei.jpg", mode="rb")
    f2 = open("d:/huerfei.jpg", mode="wb")
     
    for line in f1: # line是从f1中读取的内容
        f2.write(line)  # 把读取的内容原封不动的写出去
     
    f1.close()
    f2.flush()
    f2.close()
    ab   断点续传,如下载视频,停止后再开始从停止的位置继续下载
    文件操作中关于文件句柄的相关操作
    seek()  移动光标
    f.seek(0)  移动到开头(最多)
    f.seek(0, 2)
    seek : 1.表示偏移,   默认0,开头   1,当前位置   2,末尾
    tell:   返回光标所在的位置
    f = open("胡辣汤", mode="r+", encoding="utf-8")
    # f.seek(0,2) # 移动到末尾
    # content = f.read(5)
    # print(content)
    # f.seek(0) # 移动到开头
    # print(f.read())
    # print(f.tell())  # 字节
     
    f.seek(3)
    print(f.read())
    文件修改,实际操作
    文件修改:
    1.先从文件中读取内容
    2.把修改的内容进行修改
    3.把修改好的内容写入一个新文件
    4.删除掉原来的文件
    5.把新文件重命名成原来的文件的名字
    #####导入os 模块   os表示操作系统
    f = open("夸一夸alex", mode="r", encoding="utf-8")
    f2 = open("夸一夸alex_副本", mode="w", encoding="utf-8")
    # 导入os模块  os表示操作系统
    import os
    f = open("夸一夸alex", mode="r", encoding="utf-8")
    f2 = open("夸一夸alex_副本", mode="w", encoding="utf-8")
    for line in f:
        if "sb" in line:
            line = line.replace("sb", "好人")
            f2.write(line)
    f.close()
    f2.flush()
    f2.close()
    os.remove("夸一夸alex")    # 删除原来文件
    os.rename("夸一夸alex_副本", "夸一夸alex")    # 重命名副本为原来的文件名
    使用的 with ......as   会自动帮我们关闭文件的连接
    # 导入os模块  os表示操作系统
    import os
    f = open("夸一夸alex", mode="r", encoding="utf-8")
    f2 = open("夸一夸alex_副本", mode="w", encoding="utf-8")
     
    # with会自动的帮我们关闭文件的链接
    with open("夸一夸alex", mode="r", encoding="utf-8") as f,
         open("夸一夸alex_副本", mode="w", encoding="utf-8") as f2:
        for line in f:
            if "sb" in line:
                line = line.replace("sb", "好人")
                f2.write(line)
    # f.close()
    # f2.flush()
    # f2.close()
    # time.sleep(3) # 程序暂停3秒
    os.remove("夸一夸alex")   # 删除原来文件
    os.rename("夸一夸alex_副本", "夸一夸alex")     # 重命名副本为原来的文件名
    实际操作: 水果.txt文档
    编号,名称,价格,数量
    1,香蕉,1.85,20
    2,苹果,2.6,10
    3,榴莲,25,200
    4,木瓜,3.5,17
    f = open("水果.txt", mode="r", encoding="utf-8")
    line = f.readline().strip() # 第一行内容,   编号,名称,价格,数量,哈哈
    title = line.split(",") # [编号,名称,价格,数量,哈哈]
    lst = []
    i = 0
     
    for line in f:  # 1,香蕉,1.85,50
        dic = {}  # 每行都是一个字典
        line = line.strip()  # 去掉空白   1,香蕉,1.85,50
        data = line.split(",") # [1, 香蕉, 1.85, 50]
     
        for i in range(len(title)):
            dic[title[i]] = data[i]
     
     
  • 相关阅读:
    LeetCode#18-四数之和
    LeetCode#209-长度最小的子数组
    LeetCode#234-回文链表
    LeetCode#287-寻找重复数
    LeetCode#167-两数之和
    LeetCode#141-环形链表
    LeetCode#826-安排工作达到最大收益
    LeetCode#86-分隔链表
    LeetCode#19-删除链表的倒数第N个节点
    LeetCode#88-合并两个有序数组
  • 原文地址:https://www.cnblogs.com/yanghongtao/p/10072099.html
Copyright © 2011-2022 走看看