王老大脱发季 发表于 2022-5-29 10:53:17

python解释器无法解释文件

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
这是错误原因

Twilight6 发表于 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)

kogawananari 发表于 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)

王老大脱发季 发表于 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>

得到的是这个欸,看不懂{:5_107:}

Twilight6 发表于 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)

王老大脱发季 发表于 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>
{:10_266:}

王老大脱发季 发表于 2022-5-30 15:33:43

Twilight6 发表于 2022-5-30 15:28
这个是 csv.reader 对象,这里 print 改成 打印 k, 试试看:

哦哦,可以了,谢谢

王老大脱发季 发表于 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 怎么处理呢

Twilight6 发表于 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

王老大脱发季 发表于 2022-5-30 22:26:03

Twilight6 发表于 2022-5-30 15:49
encoding 的 utf-8 改成 UTF-8-sig

感谢!

王老大脱发季 发表于 2022-5-30 22:27:02

kogawananari 发表于 2022-5-29 13:21
这个得看你的csv是哪来的如果是微软的Excel导出的 那么必须是utf-8-sig否则会读出%ufeff 这个符号
我 ...

感谢!
页: [1]
查看完整版本: python解释器无法解释文件