Python CSV写入文件在Excel中无法读取(中文字符)
我正在尝试对中文文本进行文本分析。 该程序在下面提供。 我得到了浜烘皯鏃ユ姤绀捐
辨认的人物的结果。 如果将输出文件result.csv
更改为result.txt
,则这些字符与人民日报社论
。 那么这有什么问题? 我无法弄清楚。 我尝试了几种方法,包括加decoder
和encoder
。
# -*- coding: utf-8 -*- import os import glob import jieba import jieba.analyse import csv import codecs segList = [] raw_data_path = 'monthly_raw_data/' file_name = ["201010", "201011", "201012", "201101", "201103", "201105", "201107", "201109", "201110", "201111", "201112", "201201", "201202", "201203", "201205", "201206", "201208", "201210", "201211"] jieba.load_userdict("customized_dict.txt") for name in file_name: all_text = "" multi_line_text = "" with open(raw_data_path + name + ".txt", "r") as file: for line in file: if line != '\n': multi_line_text += line templist = multi_line_text.split('\n') for text in templist: all_text += text seg_list = jieba.cut(all_text,cut_all=False) temp_text = [] for item in seg_list: temp_text.append(item.encode('utf-8')) stop_list = [] with open("stopwords.txt", "r") as stoplistfile: for item in stoplistfile: stop_list.append(item.rstrip('\r\n')) text_without_stopwords = [] for word in temp_text: if word not in stop_list: text_without_stopwords.append(word) segList.append(text_without_stopwords) with open("results/result.csv", 'wb') as f: writer = csv.writer(f) writer.writerows(segList)
对于UTF-8编码,Excel需要在文件的开始处写入BOM(字节顺序标记)代码点,否则将采用ANSI
编码,这是与区域相关的。 U+FEFF
是Unicode物料清单。 这是一个将在Excel中正确打开的示例:
#!python2 #coding:utf8 import csv data = [[u'American',u'美国人'], [u'Chinese',u'中国人']] with open('results.csv','wb') as f: f.write(u'\ufeff'.encode('utf8')) w = csv.writer(f) for row in data: w.writerow([item.encode('utf8') for item in row])
为了完整起见,Python 3使得这更简单。 注意newline=''
参数代替wb
和utf-8-sig
编码会自动添加BOM。 Unicodestring直接写入,而不需要编码每个项目。
#!python3 #coding:utf8 import csv data = [[u'American',u'美国人'], [u'Chinese',u'中国人']] with open('results.csv','w',newline='',encoding='utf-8-sig') as f: w = csv.writer(f) w.writerows(data)
还有第三方模块unicodecsv
也使Python 2更容易:
#!python2 #coding:utf8 import unicodecsv data = [[u'American',u'美国人'], [u'Chinese',u'中国人']] with open('results.csv','wb') as f: w = unicodecsv.writer(f,encoding='utf-8-sig') w.writerows(data)
这是另一种有点棘手的方法:
#!python2 #coding:utf8 import csv data = [[u'American',u'美国人'], [u'Chinese',u'中国人']] with open('results.csv','wb') as f: f.write(u'\ufeff'.encode('utf8')) w = csv.writer(f) for row in data: w.writerow([item.encode('utf8') for item in row])
这个代码块生成编码utf-8的csv文件。
- 打开文件与记事本++(或其他编辑器与编码function)
- 编码 – > 转换为ANSI
- 保存
用Excel打开文件,没关系。