Python读取UTF-8/ISO编码文件并统计分隔符的问题
解决多编码文件读取与分隔符统计问题
针对你遇到的编码错误,我们可以通过try-except异常捕获机制实现“UTF-8读取失败则切换为ISO编码”的逻辑,同时优化代码规范性。以下是修改后的完整代码:
from collections import Counter def number_delimiter_by_file(file): # 先尝试UTF-8编码读取 try: with open(file, encoding="utf8") as fp: lines = fp.readlines() except UnicodeDecodeError: # UTF-8失败则使用ISO-8859-1(常见ISO编码)读取 with open(file, encoding="ISO-8859-1") as fp: lines = fp.readlines() # 统计每行的分号数量及分布 delimiter_counts = [] for line in lines: delimiter_counts.append(line.count(";")) return file, list(Counter(delimiter_counts).items()) # 遍历文件列表执行统计 for file in all_filenames: print(number_delimiter_by_file(file))
关键修改说明
- 编码容错逻辑:用
try-except包裹文件读取操作,当UnicodeDecodeError触发时,自动切换为ISO-8859-1编码重新读取(如果你的ISO编码是其他变种,比如ISO-8859-15,可自行替换)。 - 代码规范优化:直接在
with语句中打开文件,避免手动管理文件句柄的冗余代码;简化变量命名,让逻辑更清晰。 - 功能保留:完整保留了你原本的“统计每行分号数量,再用Counter统计分布”的核心需求。
额外提示
如果后续遇到更多编码类型的文件,可以扩展try-except的分支,比如增加gbk等常见编码的尝试;另外,readlines()会一次性读取所有行到内存,若处理超大文件,建议改用逐行遍历的方式(for line in fp:),减少内存占用。
内容的提问来源于stack exchange,提问作者KikiLan
相关产品推荐
相关产品推荐

