解决Python读取文件时出现编码异常

解决Python读取HTML文件编码错误
本文介绍了一种常见的Python读取HTML文件时遇到的UnicodeDecodeError问题及其解决方案。通过指定正确的文件编码格式(如UTF-8),可以避免Python在读取文件时出现解码错误。

解决Python读取文件时出现UnicodeDecodeError: 'gbk' codec can't decode byte...

用Python在读取某个html文件时会遇到下面问题:

出问题的代码:

1 if __name__ == '__main__':
2     fileHandler = open('../report.html', mode='r')
3 
4     report_lines = fileHandler.readlines()
5     for line in report_lines:
6         print(line.rstrip())

修改方式是在open方法指定参数encoding='UTF-8':

if __name__ == '__main__':
    fileHandler = open('../report.html', mode='r', encoding='UTF-8')

    report_lines = fileHandler.readlines()
    for line in report_lines:
        print(line.rstrip())
### Python 使用 Pandas 和 Openpyxl 处理 Excel 文件编码问题 当使用 `pandas` 库读取 Excel 文件遇到编码问题,通常是因为文件本身存在特殊字符或不同编码格式的数据。虽然 `pd.read_excel()` 函数主要用于处理 Excel 数据表,但在特定情况下可能会因为编码差异而出现问题。 对于大多数情况下的 Excel 文件读取操作,`read_excel` 并不需要显式指定编码参数,因为它依赖于底层库(如 `openpyxl` 或 `xlrd`)自动检测并解析文件内容[^1]。然而,在某些复杂场景下,如果确实遇到了由于编码引起的乱码或其他异常现象,则可以考虑如下几种方法: #### 方法一:确保源文件一致性 确认所使用的 Excel 文件是以 UTF-8 编码保存的。这可以通过 Microsoft Excel 软件设置另存为选项实现,选择合适的文本编码方式再进行保存。 #### 方法二:尝试其他引擎 有切换不同的解析器可以帮助解决问题。例如,默认情况下 `read_excel` 可能会使用 `xlrd` 来打开 `.xls` 文件;而对于较新的 `.xlsx` 格式的文档则推荐使用 `openpyxl` 引擎。通过指定 engine 参数来改变默认行为可能有助于绕过潜在的编码障碍: ```python import pandas as pd df = pd.read_excel('example.xlsx', engine='openpyxl') ``` #### 方法三:预处理数据 在极端情况下,如果仍然无法正常加载含有非标准字符集的内容,可以在导入之前先将原始 .xlsx 文件转换为 CSV 格式,并在此过程中明确指定期望的目标编码形式(比如 utf-8)。之后利用 `pandas` 的 `read_csv` 功能配合 encoding 参数完成最终的数据框构建工作。不过这种方法相对繁琐一些,仅作为备选方案提供给读者参考[^4]。 ```python # 将 Excel 文件转储为带有正确编码的 CSV 文件 from pathlib import Path import csv input_file = "data_with_encoding_issues.xlsx" output_file = "converted_data.csv" with pd.ExcelFile(input_file) as xls: sheet_names = xls.sheet_names for name in sheet_names: df_sheet = pd.read_excel(xls, sheet_name=name) with open(Path(output_file).stem + f"_{name}.csv", mode="w", newline='', encoding='utf-8') as file: writer = csv.writer(file) writer.writerow(df_sheet.columns) for row in df_sheet.itertuples(index=False, name=None): writer.writerow(row) # 接下来可以直接用 read_csv 加载这些经过编码调整后的 CSV 文件 new_df = pd.read_csv(f"{Path(output_file).stem}_{sheet_names[0]}.csv") print(new_df.head()) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值