博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python读excel生成数据存入txt文件
阅读量:6626 次
发布时间:2019-06-25

本文共 3292 字,大约阅读时间需要 10 分钟。

hot3.png

我的excel文件结构:

160505_twsM_1165991.png

学习了xlrd如何操作excel文件、python读写txt文件、jason.dumps()转换dict为string类型之后,进行了第一次尝试。

第一次尝试: 

import xlrdimport jsondata = xlrd.open_workbook('test.xlsx')#打开excel文件table = data.sheet_by_name(u'Sheet1')#通过名称获取excel表nrows = table.nrowsfinal_obj={}for i in range(nrows):	cur_row = table.row_values(i)	first = str(cur_row[0])	if first:		final_obj[first] = []		for j in range(1,len(cur_row)):			if cur_row[j]:				final_obj[first].append(cur_row[j])final_str = json.dumps(final_obj)print(final_str)file = open('test.txt', 'w')file.write(final_str)file.close()

160425_llfj_1165991.png

通过第一次尝试的代码得到了上面的内容(内容其实已经保存在txt里面,打印在屏幕上是为了方便查看结果),得出如下结论:

  1. 数字的字面类型与excel里面的类型不一致;
  2. 没有按照顺序存储数据,这主要是dict类型不分先后的原因,对于数据影响不大,但可读性较差。

接下来主要解决问题1:

import xlrdimport jsondata = xlrd.open_workbook('test.xlsx')#打开excel文件table = data.sheet_by_name(u'Sheet1')#通过名称获取excel表nrows = table.nrowsfinal_obj={}for i in range(nrows):	cur_row = table.row_values(i)	#我已经通过pirnt(cur_row[0])得知excel中的数字获得后为浮点型,判断它是否为浮点型且能够整除	if type(cur_row[0]) == type(1.1) and cur_row[0]%1 == 0:		first = str(int(cur_row[0]))	else:		first = str(cur_row[0])	if first:		final_obj[first] = []		for j in range(1,len(cur_row)):			if cur_row[j]:				if type(cur_row[j]) == type(1.1) and cur_row[j]%1 == 0:					cur_value = str(int(cur_row[j]))				else:					cur_value = str(cur_row[j])				final_obj[first].append(cur_value)final_str = json.dumps(final_obj)print(final_str)file = open('test.txt', 'w')file.write(final_str)file.close()

162345_bdqc_1165991.png

这次得到了相对正确的数字,当我修改了我的excel文件内容时:

162942_jg0y_1165991.png

162953_wSv6_1165991.png

163233_ZkXW_1165991.png

163246_Xxtb_1165991.png

根据测试,判断我对excel中的获得的浮点数的转换基本是对的,但也不能保证完全正确。

上面的代码每次遇到这种数字都需要做判断,我希望能够定义一个函数,可以重复用于转换数据

import xlrdimport jsondata = xlrd.open_workbook('test.xlsx')#打开excel文件table = data.sheet_by_name(u'Sheet1')#通过名称获取excel表nrows = table.nrowsfinal_obj={}for i in range(nrows):	cur_row = table.row_values(i)	first = toIntString(cur_row[0])	if first:		final_obj[first] = []		for j in range(1,len(cur_row)):			if cur_row[j]:				final_obj[first].append(toIntString(cur_row[j]))final_str = json.dumps(final_obj)print(final_str)file = open('test.txt', 'w')file.write(final_str)file.close()def toIntString(value):	result = ""	if type(value) == type(1.1) and value%1 == 0:		result = str(int(value))	else:		result = str(value)	return result

163915_Lzen_1165991.png

显然是定义函数的代码写在了调用函数部分的内容下面造成的,然而人家JavaScript是可以这么干的,不爽!

import xlrdimport jsondef toIntString(value):	result = ""	if type(value) == type(1.1) and value%1 == 0:		result = str(int(value))	else:		result = str(value)	return result	data = xlrd.open_workbook('test.xlsx')#打开excel文件table = data.sheet_by_name(u'Sheet1')#通过名称获取excel表nrows = table.nrowsfinal_obj={}for i in range(nrows):	cur_row = table.row_values(i)	first = toIntString(cur_row[0])	if first:		final_obj[first] = []		for j in range(1,len(cur_row)):			if cur_row[j]:				final_obj[first].append(toIntString(cur_row[j]))final_str = json.dumps(final_obj)print(final_str)file = open('test.txt', 'w')file.write(final_str)file.close()

164117_LuVH_1165991.png

成功!

 

最后的疑问:

  • 关于如何判断字符串"1.0"或"abc"(二者均有可能出现)为整数我没有找到合适的解决方法,难道只能用try…except…来解决int(str)造成的异常么?
  • 结果应该为0.2:

            164626_Cl93_1165991.png

  • 一个不和谐的方法eval(),本来打算用来转换数字的:

            165450_vAME_1165991.png

  • python里面的除法总是保留1位小数:

            165644_h9eN_1165991.png

参考:

  1. https://my.oschina.net/u/1165991/blog/742587
  2. http://www.cnblogs.com/lhj588/archive/2012/01/06/2314181.html【python操作Excel读写--使用xlrd】
  3. http://blog.sina.com.cn/s/blog_4ddef8f80102v8af.html【JSON:  Python Objects与String之间转换】

转载于:https://my.oschina.net/u/1165991/blog/749790

你可能感兴趣的文章
基础为重,Python的基础,成就月薪过万
查看>>
PHP浮点数的精确计算BCMath
查看>>
Oracle RAC安装过程中碰到的“坑”和关键点(一)
查看>>
如何让你的传输更安全——NIO模式和BIO模式实现SSL协议通信
查看>>
【云计算的1024种玩法】使用 NAS 文件储存低价获得好磁盘性能
查看>>
H.264学习笔记之一(层次结构,NAL,SPS)
查看>>
Radware:IP欺诈等让网络攻击难以防范
查看>>
基于Token认证的WebSocket连接
查看>>
【Solidity】2.合约的结构体 - 深入理解Solidity
查看>>
《Drupal实战》——2.6 小结
查看>>
《C语言及程序设计》实践参考——二分法解方程
查看>>
java thread中的wait()和notify()
查看>>
2016最新搜索引擎优化(SEO)重点要素
查看>>
当Web访问性能出现问题,如何深探?
查看>>
【IOS-COCOS2D-X 游戏开发之二】【必看篇】总结阐述COCOS2D-X与COCOS2D-IPHONE区别;
查看>>
eoLinker-API_Shop_通讯服务类API调用的代码示例合集:短信服务、手机号归属地查询、电信基站查询等...
查看>>
前端面试回忆录 - 滴滴篇 - 凉面
查看>>
jxl导入Excel 切割List 并使用MyBatis批量插入数据库
查看>>
小程序开发总结
查看>>
Tomcat监听器设计思路
查看>>