Python操作excel文件非常方便,可是当写入数据列数大于256列时就不支持了。所以必须写CSV替代。在此记录一下CSV文件的写入代码,注意utf-8编码哦!
import sys reload(sys) sys.setdefaultencoding( "utf-8" ) import xlrd import xlwt import csv file = open('my.csv', 'wb') file.write('xEFxBBxBF'); csv_writer = csv.writer(file) actor_book = xlrd.open_workbook("actors.xls") actor_sheet = actor_book.sheets()[0] actor_dic = {} for row_index in range(0, actor_sheet.nrows): actor = actor_sheet.cell(row_index, 0).value if actor not in actor_dic.keys(): actor_dic[actor] = {} actor_statistics_count_book = xlrd.open_workbook("count_statistics.xlsx") actor_statistics_count_sheet = actor_statistics_count_book.sheets()[0] column_write = False for actor_a in actor_dic.keys(): csv_row_list = [] actor_b_dic = {} csv_row_list.append(actor_a) matrix_column = 1 csv_row_title_list = [] csv_row_title_list.append("actors") for actor_b in actor_dic.keys(): if (not column_write): csv_row_title_list.append(actor_b) matrix_count = 0 for row_index in range(1, actor_statistics_count_sheet.nrows): actor1 = actor_statistics_count_sheet.cell(row_index, 0).value actor2 = actor_statistics_count_sheet.cell(row_index, 1).value if actor1 != actor_a and actor2 != actor_a: continue if actor1 != actor_b and actor2 != actor_b: continue if actor_a == actor_b and actor1 != actor2: continue matrix_count += int(actor_statistics_count_sheet.cell(row_index, 2).value) csv_row_list.append(matrix_count) if not column_write: csv_writer.writerow(csv_row_title_list) column_write = True csv_writer.writerow(csv_row_list)
接上篇,在运行这个文件的时候突然遇到一个莫名其妙的问题:“‘module’ object has no attribute 'writer'”,然后百度发现有哥们也遇到了相同的问题,是由于将另外的python文件命名为“csv.py”导致的!由于csv.py编译后会产生名为csv的module。而系统会默认在当前路径下去引入module,从而导致引入的此module非彼module!
以后一定要注意不能瞎起名啊。。。
。
CSV模块文档參考:http://docs.python.org/library/csv.html