如何解决二进制模式不采用编码参数

时间:2018-02-16 16:01:44

标签: python nltk

代码:

import nltk
eng_lish= open("C:/Users/Nouros/Desktop/Thesis/english.csv","rb", encoding='utf8').read()
bang_lish= open("C:/Users/Nouros/Desktop/Thesis/banglish.csv","rb", encoding='utf8').read()

问题:

Traceback (most recent call last):
File "C:/Users/Nouros/Desktop/Thesis/nltk_run_copy.py", line 3, in <module>
    eng_lish= open("C:/Users/Nouros/Desktop/Thesis/english.csv","rb",encoding="utf-8")
ValueError: binary mode doesn't take an encoding argument

2 个答案:

答案 0 :(得分:4)

您正在阅读csv个文件,这些文件是 text 文件。所以你需要编码而不是二进制模式。

所以你不应该使用rb打开它们(建议在Python 2中使用csv模块时这样做,但在其他情况下它是无关紧要的。)

只需使用纯文本模式:

open("C:/Users/Nouros/Desktop/Thesis/english.csv","r", encoding='utf8').read()

我更喜欢使用csv模块,以避免手动拆分线路和的cols:

import csv
with open(r"C:\Users\Nouros\Desktop\Thesis\english.csv","r", encoding='utf8') as f:
     cr = csv.reader(f,delimiter=",") # , is default
     rows = list(cr)  # create a list of rows for instance

(请注意,csv模块建议在打开文件时使用newline=""以便在Python 3中读取,但问题实际上是在编写文件时)

答案 1 :(得分:1)

根据定义,二进制模式不需要编码,因为您正在读取单个字节。只有在您想要阅读文本时,编码才有意义。不同的编码以不同方式处理二进制数据。对于某些编码,单个字节表示一个字符。对于其他人,字符可以是多个字节。这是编码的全部目的:将文本数据表示为字符。