• 文件操作 mode:r w a ... 文件句柄 文件修改(重点,难点)


    文件操作

    open 打开
    f = open(文件路径, mode="模式", encoding="编码格式")     最最底层操作的就是bytes
    打开一个文件的时候获取到的是一个文件句柄.

    文件路径:

    绝对路径
    从磁盘根目录开始寻找
    相对路径
    相对于当前程序所在的文件夹
    ../ 上一层文件
    文件夹/ 进入xxx文件夹

    1. 相对路径: 相对于当前程序所在的文件夹, 如果再文件夹内. 随便找. 直接写名字
     如果不在这个文件夹内. 可能需要出文件夹或者进文件夹
     出文件夹 ../
     进文件夹 文件夹/
     2. 绝对路径: 从磁盘根目录寻找路径 (有问题)
    只有在记录日志的时候可以用到绝对路径
     日志: 程序运行过程中记录的信息.

    mode

    r:

    r: 读取,只读.
    读取文件的相关操作
    1. read()
    默认: 读取文件内容(全部)
    read(n) 读取n个字符
    2. readline() 读取一行
    3. readlines() 读取全部. 返回列表
    (最重要)4. for line in f: 每次读取一行内容

    f = open("alex和wusir的故事", mode="r", encoding="utf-8")
    # 读取内容
    content = f.read() # 全部都读取出来
    print(content)

    f = open("小护士模特主妇萝莉.txt", mode="r", encoding="utf-8")
    print(f.read(5))  # 读取5个字符
    print(f.read(5))  # 继续读5个
    
    print(f.readline().strip()) # 换行符为分割, strip()可以去掉换行. 读取到的内容第一件事就是去掉空白
    print(f.readline()) # 换行符为分割
    f.close()#  关闭连接
    
    print("周润发", end="胡辣汤")#打印以"胡辣汤"结尾或者说最后加上"胡辣汤" print("周星驰") print(f.readlines()) # 一次性把文件中的内容读取到列表中. print("你叫什么名字? 我叫李嘉诚. 可能") # 换行 print("你叫什么名字?\n 我叫李嘉诚. 可能") # 显示 print("你叫什么名字?\\n 我叫李嘉诚. 可能") # 显示 \n 文件句柄是一个可迭代对象 优点: 相对来说节省内存, 操作相对简单 for line in f: # 从文件中读取到每一行给前面的line print(line.strip()) f.close()

    w:

    写入. 只写
    创建文件
    会清空文件

    # 每次用w模式打开文件, 都会清空这个文件(坑)
    f = open('胡辣汤', mode="w", encoding="utf-8") # 可以帮我们创建文件
    
    f.write('河南特色
    ')
    f.write("东北特色
    ")
    f.write('陕西特色
    ')
    
    # 好习惯
    f.flush()  # 刷新管道, 把数据写入文件
    f.close()   #关闭管道

    a:
    追加写

    也可以创建文件,当文件名不存在就创建一个文件

    f = open("葫芦小金刚", mode="a", encoding="utf-8") # a, append 追加, 在文件的末尾写入内容
    # f.write("你叫什么名字啊?")
    # f.read() # not readable   光标在末尾,所以读不到
    f.flush()
    f.close()

     

    对于文件而言. 应该有的操作就两个:读, 写
    r+:

    读写操作
    w+:
    写读操作
    a+:
    追加写读

    #"r+"操作演示
    f = open("葫芦小金刚", mode="r+", encoding="utf-8") content = f.read(2) # 顺序必须先读, 后写 # r+特有的深坑:不论读取内容的多少. 只要你读了. 写就是在末尾 f.write('五娃') print(content)

    #"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)
    "a+"操作演示
    追加写读, 光标在末尾. 所有的写都是在末尾 f
    = open("葫芦小金刚", mode="a+", encoding="utf-8") f.write("机器葫芦娃召唤神龙, 高喊.我代表月亮消灭你!") f.seek(0) s = f.read() print("=========>", s)

     r+

    对于读写模式. 必须是先读. 因为默认光标是在开头的. 准备读取的. 当读完了了之后再进⾏行行 写入. 我们以后使⽤用频率最⾼高的模式就是r+ 正确操作是

    w+

    有⼈人会说. 先读不就好了了么?

    错. w+ 模式下, 一开始读取不到数据. 然后写的时候再将原来
    的内容清空. 所以, 很少⽤.

     a+

    还有一些其他的带b的操作. 就不多赘述了了. 就是把字符换成字节. 仅此⽽而已,比如r+b w+b a+b

    seek  和  tell

     1. seek(n) 光标移动到n位置, 

    注意, 移动的单位是byte. 所以如果是UTF-8的中⽂文部分要 是3的倍数.       

    通常我们使⽤用seek都是移动到开头或者结尾.         

    移动到开头: seek(0)       

    移动到结尾: seek(0,2) 

    seek的第⼆个参数表示的是从哪个位置进行偏移, 默认是0,  表示开头, 1表⽰示当前位置, 2表⽰示结尾

    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())  # 字节

    2. tell() 使⽤用tell()可以帮我们获取到当前光标在什什么位置

     文件的修改(重点  难点)

    例如: 修改文件的操作

    #存在文件"夸一夸alex"


    #
    需求: 把好人换成sb # 必须: # 1. 先从文件中读取内容 # 2. 把要修改的内容进行修改 # 3. 把修改好的内容写人一个新文件 # 4. 删除掉原来的文件 # 5. 把新文件重命名成原来的文件的名字 # 导入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 "好人" in line: line = line.replace("好人", "sb") f2.write(line) # time.sleep(3) # 程序暂停3秒 # 删除原来文件 os.remove("夸一夸alex") # 重命名副本为原来的文件名 os.rename("夸一夸alex_副本", "夸一夸alex")

     

     

     

  • 相关阅读:
    matlab : Nelder mead simplex 单纯形直接搜索算法;
    python: 基本知识(二)
    vim: 基本知识;
    C++: 带参数回调函数和不带参数的回调函数;
    android studio DrawerLayout(官方侧滑菜单)的简单使用1
    Android studio DrawerLayout示例
    android studio ViewPager
    团队开发之任务认领
    android studio ViewPager的简单使用
    Android studio 菜单(Menu)
  • 原文地址:https://www.cnblogs.com/H1050676808/p/10071724.html
Copyright © 2020-2023  润新知