Python3如何仅使用os、sys模块实现CSV文件指定行的删除或替换
Python3仅用os、sys模块实现CSV指定行删除与替换功能
原有代码问题说明
你提供的替换功能代码存在两处可导致功能失效的问题:
- Python中字符串为不可变类型,
replace方法会返回替换后的新字符串,不会修改原line变量,原代码没有接收替换后的结果 - 仅对匹配到关键词的行做了替换操作,但没有将修改后的行写入目标文件,会导致匹配到的行直接丢失
删除功能的原有逻辑可以正常运行,仅匹配整行内容(去除换行符后)等于关键词的行做删除,可根据需求扩展为包含关键词即删除的模式。
替换功能完整实现
全程仅依赖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
相关产品推荐
相关产品推荐

