此篇关于用open()方法打开txt文本文件,并从中读取数据,数据的编码形式转化与注意事项的博文旨在总结博主曾遇到的相关问题,并记录下来。
文本实例为中文停用词库stopwords.txt,文本为UTF-8编码。
这里记述两种打开并读取中文文本的操作。
The first method:
import os
stopwords_path='stopwords.txt'
kk=[]
with open(stopwords_path, 'r',encoding='utf-8') as st:
kk=st.read().split('\n') #返回的kk为包含中文词汇的列表
The second method:
import os
stopwords_path='stopwords.txt'
kk=[]
with open(stopwords_path, 'rb') as st:
kk=st.read().decode('utf-8').split('\r\n') #返回的kk同上,此处在.read()读取的字符串中词汇之间使用\r\n分隔开的,不知为何与上面不同
注意两种方法的区别,第一种在open()方法中直接用其encoding属性,指定数据用utf-8编码读取出来,.read()方法读取整个文本并返回一个字符串,因此可用.split()属性以分隔符将词汇分开;
而第二种的open()用法中,以字节码文件(二进制文件)形式打开文本文件并读取数据,注意这里open()方法中不能再传递encoding参数,否则会提示(不懂为什么,希望大神能帮忙解答)
ValueError: binary mode doesn't take an encoding argument
但.read()返回的字节码对象有decode()、encode()方法,注意这两个方法只能用于字节码对象的编码与解码。
b.decode(encoding, errors) #把字节码对象b解码为对应编码的字符串;errors为错误控制
s.encode(encoding="utf-8", errors="strict") #把字符串对象s编码为字节码对象
额外记录:
.readline()返回一行字符串
.readines()返回包含所有行文本的一个列表