鱼C论坛

 找回密码
 立即注册
查看: 3981|回复: 10

[已解决]python解释器无法解释文件

[复制链接]
发表于 2022-5-29 10:53:17 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
import csv
with open('C:\\Users\\Lenovo\\Desktop\\测试1.csv','r') as file:
  reader=csv.reader(file)
  for k in reader:
        print(reader)
这是代码
我不知道为什么不能添加截图
Traceback (most recent call last):
  File "C:\Users\Lenovo\Desktop\hhh.py", line 4, in <module>
    for k in reader:
UnicodeDecodeError: 'gbk' codec can't decode byte 0xbf in position 2: illegal multibyte sequence
这是错误原因
最佳答案
2022-5-29 11:06:53

这里报错的原因是因为文件的编码和 Python 程序打开的编码不一致,导致解码错误

在 open 里面加入 encoding = "utf-8" 参数即可,参考代码:
import csv
with open('C:\\Users\\Lenovo\\Desktop\\测试1.csv','r', encoding="utf-8") as file:
  reader=csv.reader(file)
  for k in reader:
        print(reader)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-5-29 11:06:53 | 显示全部楼层    本楼为最佳答案   

这里报错的原因是因为文件的编码和 Python 程序打开的编码不一致,导致解码错误

在 open 里面加入 encoding = "utf-8" 参数即可,参考代码:
import csv
with open('C:\\Users\\Lenovo\\Desktop\\测试1.csv','r', encoding="utf-8") as file:
  reader=csv.reader(file)
  for k in reader:
        print(reader)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-29 13:21:22 | 显示全部楼层
这个得看你的csv是哪来的  如果是微软的Excel导出的 那么必须是utf-8-sig  否则会读出\ufeff 这个符号
我整一个写入的例子
import csv
filename = '名单.csv'
with open(filename, "w", encoding='utf-8-sig', newline='') as csvFile:
    writer = csv.writer(csvFile)
    fileHeader = ("姓名", "年龄")
    writer.writerow(fileHeader)
    data = ("张三",17)
    writer.writerow(data)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-30 15:27:24 | 显示全部楼层
Twilight6 发表于 2022-5-29 11:06
这里报错的原因是因为文件的编码和 Python 程序打开的编码不一致,导致解码错误

在 open 里面加入 enc ...

<_csv.reader object at 0x000001B9F70426E0>
<_csv.reader object at 0x000001B9F70426E0>
<_csv.reader object at 0x000001B9F70426E0>
<_csv.reader object at 0x000001B9F70426E0>

得到的是这个欸,看不懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-30 15:28:52 | 显示全部楼层
王老大脱发季 发表于 2022-5-30 15:27
得到的是这个欸,看不懂


这个是 csv.reader 对象,这里 print 改成 打印 k, 试试看:
import csv
with open('C:\\Users\\Lenovo\\Desktop\\测试1.csv','r', encoding="utf-8") as file:
  reader=csv.reader(file)
  for k in reader:
        print(k)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-30 15:31:52 | 显示全部楼层
kogawananari 发表于 2022-5-29 13:21
这个得看你的csv是哪来的  如果是微软的Excel导出的 那么必须是utf-8-sig  否则会读出%ufeff 这个符号
我 ...

为什么我在后面加入
reader=csv.reader(filename)
    for k in reader:
        print(reader)
得到这个
<_csv.reader object at 0x00000212F6CF3040>
<_csv.reader object at 0x00000212F6CF3040>
<_csv.reader object at 0x00000212F6CF3040>
<_csv.reader object at 0x00000212F6CF3040>
<_csv.reader object at 0x00000212F6CF3040>
<_csv.reader object at 0x00000212F6CF3040>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-30 15:33:43 | 显示全部楼层
Twilight6 发表于 2022-5-30 15:28
这个是 csv.reader 对象,这里 print 改成 打印 k, 试试看:

哦哦,可以了,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-30 15:36:06 | 显示全部楼层
Twilight6 发表于 2022-5-30 15:28
这个是 csv.reader 对象,这里 print 改成 打印 k, 试试看:

['\ufeff2013水平', '2015水平']
['0.441 ', '0.391 ']
['0.449 ', '0.408 ']
请问最开始出现的\ufeff 怎么处理呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-30 15:49:27 | 显示全部楼层
王老大脱发季 发表于 2022-5-30 15:36
['%ufeff2013水平', '2015水平']
['0.441 ', '0.391 ']
['0.449 ', '0.408 ']



encoding 的 utf-8 改成 UTF-8-sig

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-30 22:26:03 From FishC Mobile | 显示全部楼层
Twilight6 发表于 2022-5-30 15:49
encoding 的 utf-8 改成 UTF-8-sig

感谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-30 22:27:02 From FishC Mobile | 显示全部楼层
kogawananari 发表于 2022-5-29 13:21
这个得看你的csv是哪来的  如果是微软的Excel导出的 那么必须是utf-8-sig  否则会读出%ufeff 这个符号
我 ...

感谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-27 09:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表