23 文件修改

268次阅读
没有评论

共计 1237 个字符,预计需要花费 4 分钟才能阅读完成。

引入

1. 修改的概念

  • 对于硬盘上数据的修改, 根本没有改的操作, 只有覆盖操作

2. 修改的流程

  • 文件的修改都是数据加载到内存中, 在内存中修改完再覆盖入硬盘

一. 修改方式一

1. 修改过程

  • 先以 r 模式打开源文件,将源文件内容全部读入内存
  • 然后在内存中完成修改
  • 再以 w 模式打开源文件,将修改后的内容覆盖入源文件

2. 优缺点

  • 优点 : 不须要硬盘预留足够的空间
  • 缺点 : 会在文件内容过大的情况下,占用过多的 内存

3. 使用场景

  • 看情况而定, 一般用于文本编辑器, 让用户能看到全部的内容
with open('user.txt',mode='r',encoding='utf-8') as f:
    data=f.read()
    data=data.replace('派大星','派大星和海绵宝宝')

with open('user.txt',mode='w',encoding='utf-8') as f:
    f.write(data)

二. 修改方式二

1. 修改过程

  • r 模式打开源文件,然后以 w 模式打开一个 临时文件
  • 从源文件中读一行到内存中,修改完毕后直接写入临时文件,循环往复,直到操作完毕所有行
  • 删除源文件,将临时文件名改名为源文件名

2. 使用到 OS 模块

  • import os : 导入模块
  • os.remove() : 删除
  • os.rename() : 改名

3. 优缺点

  • 优点:没有对内存造成过度的占用
  • 缺点 :需要 硬盘 预留出足够的空间来存放临时文件

4. 适用场景

  • 看具体而定, 一般用于程序员开发式
import os

with open('user.txt',mode='rt',encoding='utf-8') as read_f,\
        open('user.txt.swap',mode='wt',encoding='utf-8') as write_f:

    for line in read_f:
        if '派大星' in line:
            line=line.replace('派大星','派大星和海绵宝宝')

        write_f.write(line)

os.remove('user.txt')                  #删除源文件 
os.rename('user.txt.swap','user.txt')  #把临时文件名改成源文件名

三. 文件拷贝示例

可以拷贝任意类型的文件

🍉"os.path.isfile()" 先判断文件是否存在
import os
while 1:
    user_file = input(" 请输入文件路径 >>").strip()
    if not os.path.isfile(user_file):
        print(" 文件不存在, 请重新输入 ")
        continue
    else:
        copy_path = input(" 请输入目标路径 >>").strip()
        with open(r"%s"%(user_file),"rb")as read_file,\
            open(r"%s"%(copy_path),"ab")as w_f:
            for line in read_file:
                w_f.write(line)
            if len(user_file) == len(copy_path):
                print("copy 成功 ")
                break
正文完
 
shawn
版权声明:本站原创文章,由 shawn 2023-06-16发表,共计1237字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)