如何修改Python代码删除含同一非连续字符超3次的CSV行
解决方法:过滤掉任一字符出现次数超3次的行
嘿,你的需求很明确——原来的代码只处理连续3个相同字符的情况,现在要改成不管字符是不是连续,只要它在一行里出现超过3次就删掉整行对吧?
核心思路调整:
原来的bad_words列表思路只适用于连续重复的场景,现在我们需要统计每行里每个字符的总出现次数,只要有字符的计数>3,就把这行过滤掉。Python的collections.Counter刚好能帮我们快速完成字符计数的工作。
修改后的完整代码:
from collections import Counter with open('7.csv') as oldfile, open('new7.csv', 'w') as newfile: for line in oldfile: # 先去掉行首尾的换行/空白,避免把换行符也算进统计里 cleaned_line = line.strip() # 统计每个字符的出现次数 char_counts = Counter(cleaned_line) # 检查是否存在字符出现超过3次的情况 if not any(count > 3 for count in char_counts.values()): newfile.write(line)
代码拆解说明:
Counter(cleaned_line):比如传入BAABAAG,会返回一个字典样的对象{'A':4, 'B':2, 'G':1},清晰展示每个字符的出现次数。any(count >3 ...):遍历所有字符的计数,只要有一个超过3,这个表达式就返回True。我们用not来取反——只有当所有字符的计数都≤3时,才把该行写入新文件。- 保留原行格式:虽然我们用
strip()清理了行来统计,但写入新文件时还是用原始的line,这样不会破坏原文件的换行和格式。
测试你的示例行:
拿你给的例子来看:
BAABAAG里A出现4次 → 会被过滤掉- 如果有一行是
BAABAC,A出现3次、B2次、C1次 → 会被保留下来
这样就完美实现你要的需求啦!
内容的提问来源于stack exchange,提问作者aaddkah
相关产品推荐
相关产品推荐

