python读写文件(先读再清空写)

部署运行你感兴趣的模型镜像

需求:
读出所有内容,删除掉其中某些内容,然后将剩余的内容写回。

问题:
现有的r+,a+,w+等都不是正好满足上述需求的;要么是替换,要么是append

解决:
读完后将筛选后的内容放在内存里,指针指向0处,然后清空文本,然后写入。

代码:

missed = 'D:/Final_data/missed/txt_rgb/'
files = os.listdir(missed)
for file in files:
    print(file)
    with open(missed+file, 'r+') as f1:
        boxes = f1.readlines()
        print(len(boxes))
        for box in boxes[:]: # 注意这个地方
#             box = boxes[i]
            if len(box) > 2:
                if float(box.split()[-1]) < 0.25:
                    boxes.remove(box)
    
        print(len(boxes))

        f1.seek(0)
        f1.truncate()
        f1.writelines(boxes)

您可能感兴趣的与本文相关的镜像

Python3.11

Python3.11

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

<think>我们要实现的功能是:用Python读取一个文件的内容,然后覆盖写入到同一个文件中(注意:先读取再覆盖写入,可能会造成原内容丢失,通常我们读取后处理内容再回) 但注意:如果直接先读取再写入同一个文件,可能会因为读取后文件内容已经加载到内存,然后以写入模式打开文件清空文件,再将内存中的内容回。但这样做有一个风险:如果文件很大,内存可能不够;另外,如果在读取和写入之间发生错误,可能导致文件内容丢失。 更安全的做法是:先读取原文件内容,然后处理(如果需要处理的话),然后将处理后的内容写入到一个临时文件,最后用临时文件替换原文件。但根据题目要求,我们只是先读取再覆盖写入,不涉及处理,且要求覆盖写入同一个文件。 不过,根据要求,我们直接实现:打开文件,读取内容,然后关闭文件,再以写入模式打开同一个文件,将内容回(或者不关闭,但用不同的模式打开两次,但这样容易出错)。还有一种方式是使用`r+`模式,但需要小心指针位置。 但是,请注意:直接先读取整个文件然后立即写入同一个文件,如果文件不大,可以这样做。 步骤: 1. 以只读模式打开文件,读取全部内容。 2. 关闭文件。 3. 以写入模式(会清空文件)打开同一个文件,将读取的内容写入。 或者使用`with`语句分两次打开。 示例:假设文件名为example.txt 注意:如果文件很大,这种方法可能会占用大量内存。对于大文件,我们通常不会一次性读取全部内容,但题目没有说明文件大小,我们按小文件处理。 另外,如果读取后需要对内容进行修改,然后再写入,那么可以在读取后对内容进行处理。 下面给出代码,假设我们不需要修改内容,只是读取再原样回(这样文件内容不变,但实际中我们可能是要修改内容后再回):</think>以下是用 Python 实现文件先读取再覆盖写入的解决方案: ```python # 读取文件内容 with open('example.txt', 'r') as file: content = file.read() # 此处可添加对内容的处理逻辑 # 例如:new_content = content.replace("old", "new") # 覆盖写入文件(使用相同文件名) with open('example.txt', 'w') as file: file.write(content) # 若需要修改内容,请替换为处理后的新内容 ``` ### 代码解释: 1. **读取阶段**: - 使用 `with open('example.txt', 'r')` 以只读模式打开文件 - `file.read()` 一次性读取全部内容到变量 `content` - `with` 语句确保文件自动关闭 2. **处理阶段**(可选): - 可在两个 `with` 块之间添加内容处理逻辑 - 示例:`new_content = content.upper()` 将内容转为大 3. **写入阶段**: - 使用 `with open('example.txt', 'w')` 以写入模式重新打开文件 - `'w'` 模式会**清空文件原有内容** - `file.write(content)` 将读取的内容(或修改后的内容)文件 ### 注意事项: 1. **文件路径**:确保 `example.txt` 与脚本同目录,或使用绝对路径如 `C:/path/file.txt` 2. **大文件处理**:超大文件建议逐行处理(避免内存溢出): ```python # 大文件处理方案 with open('bigfile.txt', 'r') as infile: lines = infile.readlines() # 逐行读取 processed_lines = [line.upper() for line in lines] # 示例处理 with open('bigfile.txt', 'w') as outfile: outfile.writelines(processed_lines) # 逐行写入 ``` 3. **安全备份**:重要文件操作前建议备份: ```python import shutil shutil.copy2('example.txt', 'example_backup.txt') # 保留元数据的备份 ```
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值