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

Python3如何仅使用os、sys模块实现CSV文件指定行的删除或替换

Python3仅用os、sys模块实现CSV指定行删除与替换功能

原有代码问题说明

你提供的替换功能代码存在两处可导致功能失效的问题:

  1. Python中字符串为不可变类型,replace方法会返回替换后的新字符串,不会修改原line变量,原代码没有接收替换后的结果
  2. 仅对匹配到关键词的行做了替换操作,但没有将修改后的行写入目标文件,会导致匹配到的行直接丢失

删除功能的原有逻辑可以正常运行,仅匹配整行内容(去除换行符后)等于关键词的行做删除,可根据需求扩展为包含关键词即删除的模式。

替换功能完整实现

全程仅依赖os、sys内置模块,支持命令行传参、自动备份原文件,避免误操作丢失数据:

import sys
import os

# 命令行调用格式:python replace_csv.py 目标文件路径 匹配关键词 待替换内容 替换后内容
if len(sys.argv) == 5:
    file_path = sys.argv[1]
    match_keyword = sys.argv[2]
    old_content = sys.argv[3]
    new_content = sys.argv[4]
else:
    # 未传参时使用默认配置
    file_path = "test.csv"
    match_keyword = "blah"
    old_content = "the old word"
    new_content = "the new word"

# 操作前自动备份原文件
if os.path.exists(file_path):
    os.rename(file_path, f"{file_path}.bak")
else:
    print(f"错误:文件{file_path}不存在")
    sys.exit(1)

# 读取备份文件内容,写入修改后的内容到原路径
with open(f"{file_path}.bak", "r", encoding="utf-8") as f:
    lines = f.readlines()

with open(file_path, "w", encoding="utf-8") as f:
    for line in lines:
        if match_keyword in line:
            line = line.replace(old_content, new_content)
        f.write(line)

# 不需要保留备份可取消下方注释
# os.remove(f"{file_path}.bak")

删除功能完整实现

支持两种匹配模式,可按需切换:

import sys
import os

# 命令行调用格式:python delete_csv.py 目标文件路径 匹配关键词 匹配模式
# 匹配模式:1=整行完全匹配删除,2=行内包含关键词即删除
if len(sys.argv) >= 3:
    file_path = sys.argv[1]
    match_keyword = sys.argv[2]
    match_mode = int(sys.argv[3]) if len(sys.argv) == 4 else 1
else:
    file_path = "test.csv"
    match_keyword = "blahblah"
    match_mode = 1

if os.path.exists(file_path):
    os.rename(file_path, f"{file_path}.bak")
else:
    print(f"错误:文件{file_path}不存在")
    sys.exit(1)

with open(f"{file_path}.bak", "r", encoding="utf-8") as f:
    lines = f.readlines()

with open(file_path, "w", encoding="utf-8") as f:
    for line in lines:
        if match_mode == 1:
            if line.strip("\n") != match_keyword:
                f.write(line)
        else:
            if match_keyword not in line:
                f.write(line)

# 不需要保留备份可取消下方注释
# os.remove(f"{file_path}.bak")

注意:以上实现为纯文本行处理逻辑,仅适用于行内无换行符嵌套的常规CSV文件,若CSV存在单元格内换行、引号嵌套等复杂格式,需额外兼容处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 14:45:07