Python数据分析基础——Excel文件——格式化日期格式

参考文献:《Python数据分析基础》

前言

在读写单个Excel文件时,常常希望输出文件的格式与原文件相同。例如在之前提到的,希望输出文件中的日期格式如之前一样,为了避免之前的问题,可以使用xlrd修改日期格式,使他们看上去与输入的Excel文件一样。

创建脚本

#!/usr/bin/env python3
import sys
from datetime import date
from xlrd import open_workbook, xldate_as_tuple
from xlwt import Workbook

input_file = sys.argv[1]
output_file = sys.argv[2]

output_workbook = Workbook()
output_worksheet = output_workbook.add_sheet('jan_2013_output')

with open_workbook(input_file) as workbook:
	worksheet = workbook.sheet_by_name('january_2013')
	for row_index in range(worksheet.nrows):
		row_list_output = []
		for col_index in range(worksheet.ncols):
			if worksheet.cell_type(row_index, col_index) == 3:
				date_cell = xldate_as_tuple(worksheet.cell_value(row_index, col_index),workbook.datemode)
				date_cell = date(*date_cell[0:3]).strftime('%m/%d/%Y')
				row_list_output.append(date_cell)
				output_worksheet.write(row_index, col_index, date_cell)
			else:
				non_date_cell = worksheet.cell_value(row_index,col_index)
				row_list_output.append(non_date_cell)
				output_worksheet.write(row_index, col_index, non_date_cell)
output_workbook.save(output_file)

脚本代码注释

row_list_output = []

这一行代码创建了一个空列表,用于存储每行的元素。小编认为,可以省略这一行代码,但还未找到最好的解释。

if worksheet.cell_type(row_index, col_index) == 3:
				date_cell = xldate_as_tuple(worksheet.cell_value(row_index, col_index),workbook.datemode)
				date_cell = date(*date_cell[0:3]).strftime('%m/%d/%Y')
				row_list_output.append(date_cell)
				output_worksheet.write(row_index, col_index, date_cell)

这部分代码创建了if的控制流语句来检验单元格类型是否为3。单元格类型为3代表该单元格包含日期数据。换句话来说,如果当下单元格为日期类型数据,那么就进行if语句下的操作。
xldate_as_tuple函数可以将Excel表格中代表日期,时间或者日期时间的数值转换为元组。只要将数值转换成了原组并将时间元素格式化成不同的时间格式。在这里简单介绍一下xldate_as_tuple函数原型。

xldate_as_tuple(date_value, datemode)

第一个参数为该单元格的时间数据,第二个参数是是时间基准,它可以使函数确定是基于1900年还是基于1904年,并据此将数值转换成正确的元组。
第三行代码中,引用data函数,将前面处理过的这些值转换成一个date对象。这里简单说一下,date对象包含了年月日,但不包含时分秒。相反,datetime函数创建的对象则包含时间元素。引用strftime函数将date函数转换为一个具有特定格式的字符串。

else:
	non_date_cell = worksheet.cell_value(row_index,col_index)
	row_list_output.append(non_date_cell)
	output_worksheet.write(row_index, col_index, non_date_cell)

与if语句相对的,else下的语句块则是处理非时间类型的单元格。

运行代码

在命令行输入以下命令,然后按回车键:
在这里插入图片描述

查看结果

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值