Python CSV写入文件在Excel中无法读取(中文字符)

我正在尝试对中文文本进行文本分析。 该程序在下面提供。 我得到了浜烘皯鏃ユ姤绀捐辨认的人物的结果。 如果将输出文件result.csv更改为result.txt ,则这些字符与人民日报社论 。 那么这有什么问题? 我无法弄清楚。 我尝试了几种方法,包括加decoderencoder

  # -*- 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=''参数代替wbutf-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文件。

  1. 打开文件与记事本++(或其他编辑器与编码function)
  2. 编码 – > 转换为ANSI
  3. 保存

用Excel打开文件,没关系。