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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 08:25:20