Python将Excel数据写入TXT遇重复,如何删除每行指定字符串
现有实现的核心问题
- 变量类型与定义错误:初始化阶段把
i、j设为空列表,后续逻辑又想存单元格位置字符串,类型不匹配;空值分支写的j = I,大写I属于未定义变量,运行时会直接触发NameError报错,流程完全跑不通。 - 写入逻辑缺换行:每列值写入后只拼接制表符,全程没有在一行遍历完成后写入换行符,所有内容会连在同一长行里,很容易被误判为数据重复。
- 判重逻辑失效:空值、有值两个分支都把
flag设为True,i和j的赋值规则完全不对等,根本起不到对比单元格位置、过滤重复内容的作用。 - 文件模式问题:用
a+追加模式打开文件,多次运行脚本会把新内容拼在旧内容后面,新旧数据混杂也会表现为“数据重复”。
修正后的可运行去重写入逻辑
逻辑说明:每遍历一行先收集所有非空单元格的值,和上一次实际写入的行内容做比对,完全一致就跳过写入,不一致就按制表符分隔、带换行写入文件,从源头避免重复:
import openpyxl # 替换为你实际的Excel读取逻辑 theFile = openpyxl.load_workbook("你的Excel文件路径.xlsx") allSheetNames = theFile.sheetnames # 用w模式覆盖写入,避免多次运行追加造成的假重复 with open("test1.txt", "w", encoding="utf-8") as f: last_written_row = None for sheet in allSheetNames: currentSheet = theFile[sheet] # 从第2行开始遍历,跳过表头 for row in range(2, currentSheet.max_row + 1): current_row_values = [] # 遍历A到F列 for column in "ABCDEF": cell = currentSheet[f"{column}{row}"] if cell.value is not None: current_row_values.append(str(cell.value)) # 空行直接跳过 if not current_row_values: continue current_row_str = "\t".join(current_row_values) # 和上一次写入内容一致就跳过,避免重复 if current_row_str != last_written_row: f.write(current_row_str + "\n") last_written_row = current_row_str
逐行删除文件内特定字符串的实现
Python没有内置专门做这类操作的单行函数,但可以通过标准库实现极简逻辑,不需要安装第三方依赖:
示例需求为删除文本文件每行内的目标字符串,实现代码:
# 逐行读取内容、替换目标字符串、覆写回原文件 with open("test1.txt", "r", encoding="utf-8") as f: all_lines = f.readlines() processed_lines = [line.replace("要删除的特定字符串", "") for line in all_lines] with open("test1.txt", "w", encoding="utf-8") as f: f.writelines(processed_lines)
如果是GB级别的超大文本文件,可以改成流式逐行读写,减少内存占用。
内容的提问来源于stack exchange,提问作者Rao Sunny
相关产品推荐
相关产品推荐

