【pd读取csv文件踩坑】读取csv文件时报错:UnicodeDecodeError: ‘utf-8‘ codec can‘t decode byte 0xb5 in position 0

CSV文件编码问题解析
本文详细解析了在使用pandas读取CSV文件时遇到的UnicodeDecodeError错误,并提供了修改文件编码方式的解决方案,避免因Excel编辑导致的编码问题。
写在前面:

由于优快云的审查机制的原因,更多博客内容请访问我的个人博客或GitHub:

  1. 个人博客地址:个人博客
  2. GitHub地址:GitHub
    你是否有过之前用pd.read打开csv文件都正常,但突然有一天运行以前的代码就突然报错:UnicodeDecodeError: ‘utf-8’ codec can’t decode byte 0xb5 in position 0: invalid start byte,然后再谷歌中搜索答案发现普遍的解决方案就是修改编码方式:类似于encoding="gbk"这类的,然后运行后仍然报错:UnicodeDecodeError: ‘gbk’ codec can’t decode byte 0xae in position 8: illegal multibyte sequence,如果你遇到的是这种情况请读下去
    错误说明:这里通过这两次报错很明显发现就是文件的编码方式不对,换句话说就是utf-8(默认pd打开csv的方式)或者gbk这两种编码方式都打不开csv文件,所以解决的办法非常简单,就是修改csv文件的编码方式为uft-8或者gbk,这里用修改为utf-8为例
    不指定编码方式,用默认编码方式读取csv文件
path = "./tmp_domestic/"
files = os.listdir(path)
usa_date2 = []
usa_new2 = []
for i in files:
    usa_data = pd.read_csv("./tmp_domestic/{}".format(i), index_col=0)  # 默认用utf-8编码方式打开
    date = i[-9:-4]
    usa_new_tmp = usa_data.loc["香港"]["现有确诊"]
    usa_new2.append(int(usa_new_tmp))
    usa_date2.append(date)

报错:UnicodeDecodeError: ‘utf-8’ codec can’t decode byte 0xb5 in position 0: invalid start byte,意思就是utf-8编码方式不能解码你要读取的文件
在这里插入图片描述
修改编码方式为gbk进行调试

path = "./tmp_domestic/"
files = os.listdir(path)
usa_date = []
usa_new = []
for i in files:
    usa_data = pd.read_csv("./tmp_domestic/{}".format(i), index_col=0,encoding="gbk")  # 修改编码方式为gbk进行调试
    date = i[-9:-4]
    usa_new_tmp = usa_data.loc["江苏"]["现有确诊"]
    usa_new2.append(int(usa_new_tmp))
    usa_date2.append(date)

报错:UnicodeDecodeError: ‘gbk’ codec can’t decode byte 0xae in position 8: illegal multibyte sequence,意思是gbk也无法解码改文件
解决方案:找到你要读取的文件,然后用记事本打开,然后点击另存为,出现如下界面
在这里插入图片描述
你会发现你要读取的文件既不是utf-8也不是gbk,而是另外一种编码方式,这也就是你为什么读取不了的原因,所以你需要把编码方式改为utf-8然后覆盖原文件保存,然后运行之前的代码即可正常运行

path = "./tmp_domestic/"
files = os.listdir(path)
usa_date = []
usa_new = []
for i in files:
    usa_data = pd.read_csv("./tmp_domestic/{}".format(i), index_col=0)
    date = i[-9:-4]
    usa_new_tmp = usa_data.loc["香港"]["现有确诊"]
    usa_new.append(int(usa_new_tmp))
    usa_date.append(date)

说到文件编码方式被改变的原因,最大的可能就是你通过excell文件打开了csv文件,然后修改了里面的内容导致编码方式改变,在你修改并要保存的时候回出现这样的提示,就是在告诉你文件的相关内容被修改了,所以以后如果要修改csv文件的内容不要直接在excell中修改保存要用记事本打开并保存,否则就会出现编码方式改变导致无法读取的情况
在这里插入图片描述

出现 `UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb5 in position 248: invalid start byte` 错误,意味着 Python 在尝试使用 UTF - 8 编码解码数据,遇到了不符合 UTF - 8 编码规则的字节。以下是一些可能的解决方法: #### 1. 指定正确的编码格式 当读取文件,明确指定文件的实际编码格式。例如,若文件编码为 ANSI,可以在读取文件指定编码: ```python with open('your_file.txt', 'r', encoding='ANSI') as f: content = f.read() ``` 若处理的是 CSV 文件,使用 `pandas` 库读取指定编码: ```python import pandas as pd df = pd.read_csv('your_file.csv', encoding='ANSI') ``` 这里使用 `ANSI` 只是示例,实际编码格式需通过工具(如记事本)查看文件来确定 [^5]。 #### 2. 处理压缩数据 若数据是经过压缩的(如 gzip 压缩),需先进行解压缩。例如: ```python import gzip with gzip.open('your_file.gz', 'rt', encoding='utf-8') as f: content = f.read() ``` 若从网络获取的数据是压缩的,需在代码中添加解压缩逻辑,避免将压缩数据当作普通文本处理 [^4]。 #### 3. 忽略解码错误 在读取文件,可以使用 `errors` 参数忽略解码错误,不过这种方法可能会丢失部分数据: ```python with open('your_file.txt', 'r', encoding='utf-8', errors='ignore') as f: content = f.read() ``` #### 4. 替换解码错误 也可以使用 `errors` 参数将无法解码的字节替换为特定字符: ```python with open('your_file.txt', 'r', encoding='utf-8', errors='replace') as f: content = f.read() ```
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值