“智能问诊”项目——数据处理(2)
来源:互联网 发布:淘宝无线端首页 编辑:程序博客网 时间:2024/05/01 08:24
这篇博客主要记录项目开发过程中遇到的两个问题
第一个问题是由于之前发现Python直接对数据库进行修改时受网络情况影响大,导致效率低下,所以改用本地Excel进行分词以及数据清洗的操作,这样明显比之前的效率高了不少,但是由于电脑本身的性能限制,仍然有些不理想,但已经比原来好很多了
之前对Excel进行操作主要用到了xlwt模块,这个模块主要功能是向Excel导入数据,而如果要实现本地分词,就要从Excel中读取数据,然后分词后填入另一个表格,这就用到了import xlrd模块
目前还没有更好的方法来追写Excel,在网上搜索到以及之后用到的方法就是使用第三方库xlutils来实现了这个功能,主体思想就是先复制一份Sheet然后再次基础上追加并保存到一份新的Excel文档中去。
Python中一般使用xlrd(excel read)来读取Excel文件,使用xlwt(excel write)来生成Excel文件(可以控制Excel中单元格的格式),需要注意的是,用xlrd读 取excel是不能对其进行操作的:xlrd.open_workbook()方法返回xlrd.Book类型,是只读的,不能对其进行操作。而 xlwt.Workbook()返回的xlwt.Workbook类型的save(filepath)方法可以保存excel文件。因此对于读取和生成Excel文件都非常容易处理,但是对于已经存在的Excel文件进行修改就比较麻烦了。不过,还有一个xlutils(依赖于xlrd和xlwt)提供复制excel文件内容和修改文件的功能。其实际也只是在xlrd.Book和xlwt.Workbook之间建立了一个管道而已,如下图:
附源码
__author__='XJX'__date__='2017.07.26'# -*- coding: UTF-8 -*- # How to read from an Excel using xlrd module import xlrdimport xlwtimport jiebafrom xlutils.copy import copyimport os.path# 打开指定路径中的xls文件 xlsfile = r'/users/xujiaxing/desktop/data.xls' book = xlrd.open_workbook(xlsfile,formatting_info=True) # 得到Excel文件的book对象 # 得到sheet对象 sheet0 = book.sheet_by_index(0) # 通过sheet索引获得sheet对象 sheet_name0 = book.sheet_names()[0] # 获得指定索引的sheet名字 print (sheet_name0) sheet0 = book.sheet_by_name(sheet_name0) # 通过sheet名字来获取,当然如果知道sheet名字就可以直接指定 sheet1 = book.sheet_by_index(1) # 通过sheet索引获得sheet对象 sheet_name1 = book.sheet_names()[1] # 获得指定索引的sheet名字 print (sheet_name1) sheet1 = book.sheet_by_name(sheet_name1) # 通过sheet名字来获取,当然如果知道sheet名字就可以直接指定 wb = copy(book) sheet = wb.get_sheet(1)# 获得行数和列数 nrows = sheet0.nrows # 行总数 print(nrows)k = 1for j in range(1nrows): cell_value = sheet0.cell_value(j, 3) print(cell_value) word = list(jieba.cut(cell_value,cut_all=False))#精确模式 for n in word: sheet.write(k,1,j) sheet.write(k,2,n) print(j) print(n) k += 1 j += 1 #book.save("/Users/xujiaxing/Desktop/data.xls") wb.save("/Users/xujiaxing/Desktop/data.xls")此外,在写入Excel的过程中还遇到了其他的问题,就是当写入行数超过65534时程序会报错,解决方法是无法写入时另起一行或新建一个sheet继续写入
第二个问题是我尝试将Excel数据导入到txt文件时遇到的,打开txt时如果不指定编码格式,像这样
f = open(in_text,'w')那其默认编码格式为ASCII,这就导致从Excel提取到的UTF-8格式的数据无法写入到txt,会报错说f.write(value)中value应为str格式而不是bite格式,而将value强制转化为str格式后又发现写入的数据出现乱码
最后发现在打开txt时要指定编码格式,即在open函数中增加一个参数
f = open(in_text,'w',encoding='utf8')这样指定了txt打开时即为UTF-8格式编码,再写入就无需转换value格式了
附源码:
# -*- coding: UTF-8 -*- __author__='XJX'__date__='2017.07.28'# How to read from an Excel using xlrd module import xlrdimport xlwtimport osimport codecs# 打开指定路径中的xls文件 xlsfile = r'/users/xujiaxing/desktop/data.xls' book = xlrd.open_workbook(xlsfile,formatting_info=True) # 得到Excel文件的book对象 # 得到sheet对象 sheet1 = book.sheet_by_index(1) # 通过sheet索引获得sheet对象 sheet_name1 = book.sheet_names()[1] # 获得指定索引的sheet名字 print (sheet_name1) sheet1 = book.sheet_by_name(sheet_name1) # 通过sheet名字来获取,当然如果知道sheet名字就可以直接指定 # 获得行数和列数 nrows = sheet1.nrows # 行总数 print(nrows)in_text = r"/Users/xujiaxing/Downloads/temp.txt"f = open(in_text,'w',encoding='utf8')for j in range(1,nrows): cell_value = sheet1.cell_value(j, 1) print( cell_value) f.write(cell_value+'\n') j += 1f.close()
- “智能问诊”项目——数据处理(2)
- “智能问诊”项目——数据处理(1)
- “智能问诊”项目——数据获取(2)
- “智能问诊”项目——数据获取(1)
- “智能问诊”项目——机器学习(1)
- “智能问诊”项目——数据获取(3)
- “智能问诊”项目——数据匹配(1)
- 小项目——大数据处理
- 实验室智能管理系统(1)——项目介绍
- STM32项目(五)——智能回收箱
- STM32项目(七) —— 智能仓库管理系统
- 项目 - 智能交通(2)
- Android学习之——(3)项目中的WebService返回数据处理学习
- 智能称体脂称实现(代码与基本数据处理篇)
- 医疗项目:电话问诊,需要为电话按钮添加波纹扩散效果
- 智能管家项目总结(2)
- Qt 数据处理 — model
- 数据结构 — 海量数据处理
- TextView中android:textIsSelectable属性的坑
- 报错Can't find bundle for base name ClientMessages, locale zh_CN
- java.lang.IllegalStateException: Cannot forward after response has been committed问题的解决
- jqGrid 各种参数 详解
- leetcode-7- Reverse Integer
- “智能问诊”项目——数据处理(2)
- 题目1164:旋转矩阵
- 1481:Maximum sum
- Android Exception&Throwable 常见异常和解决方法 奔溃日志上报 monkey异常修改
- Hive查询表,返回数据全是NULL
- POJ 1850 组合编号
- MySQL-5.6.31-winx64.zip 手动安装及配置
- cannot reload avd list问题
- C++类静态成员与类静态成员函数