You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

删除含指定字符串的文本行遇PermissionError,求Pythonic解决方案

解决删除文件指定行时的PermissionError及优化实现

问题背景

需求是读取文本文件course work.txt,删除包含用户输入字符串的行。现有代码运行时抛出PermissionError: [WinError 5],临时文件生成正常,但无法覆盖原文件。

示例原文件内容:

Eric/20/SL/merc/3433
John/30/AU/BMW/2324
Tony/24/US/ford/4532
Leo/32/JP/Toyota/1344

输入Eric后期望的文件内容:

John/30/AU/BMW/2324
Tony/24/US/ford/4532
Leo/32/JP/Toyota/1344

错误原因

Windows系统下,文件被打开时会处于锁定状态。你的代码最外层已经用with语句打开了course work.txt,在这个上下文未结束时,又再次打开该文件并尝试用os.replace替换它,此时原文件的句柄还未释放,系统拒绝替换操作。

修复方案

调整代码结构,确保在执行文件替换前,原文件的所有句柄都已关闭:

import os

# 先获取用户输入,避免提前占用文件句柄
word = input('Search: ')

file_path = 'course work.txt'
# 检查文件是否存在
try:
    with open(file_path, 'r') as original:
        content = original.read()
except FileNotFoundError:
    print('文件不存在')
    exit()

if word in content:
    print('用户输入的内容存在')
    confirmation = input('按回车键确认删除')
    if confirmation == '':
        # 此时外层文件句柄已关闭,重新打开处理行
        with open(file_path, 'r') as original, open('temp.txt', 'w') as temporary:
            for line in original:
                # 直接判断字符串是否在行内,无需额外处理换行符
                if word not in line:
                    temporary.write(line)
        os.replace('temp.txt', file_path)
else:
    print('未找到匹配的内容')

更Pythonic的实现

使用pathlib模块(Python3.4+)简化文件操作,同时优化逻辑,适配大文件场景:

from pathlib import Path

word = input('Search: ')
file_path = Path('course work.txt')

# 先检查文件是否存在
if not file_path.exists():
    print('文件不存在')
    exit()

# 可选:提前检查是否有匹配内容,避免无意义的确认步骤
if word not in file_path.read_text():
    print('未找到匹配的内容')
    exit()

confirmation = input('按回车键确认删除')
if confirmation != '':
    exit()

# 用生成器表达式过滤行,高效处理大文件
temp_path = Path('temp.txt')
with file_path.open('r') as f_in, temp_path.open('w') as f_out:
    f_out.writelines(line for line in f_in if word not in line)

# 替换原文件
temp_path.replace(file_path)

额外优化点

  1. 增加文件不存在的异常处理,避免程序崩溃
  2. 用生成器表达式简化行过滤逻辑,更符合Python简洁风格
  3. 使用pathlib统一文件路径操作,跨平台兼容性更好
  4. 移除冗余的strip("\n"),保留原文件的换行格式,不影响字符串匹配

内容的提问来源于stack exchange,提问作者Janaka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 20:15:35