pandas 将excell转为csv,并且替换掉excell里面的换行符,处理完日期
业务需求:公司从外部获取了一份excell文件,需要把文件放到hive里面,excell里面有不符合要求的日期格式,并且字段里面包含换行符,hive识别后,会造成字段串位,所以需要把excell的日期和换行符处理完成之后,转成csv,然后推到集群
- 将excell转成csv
def excell_to_csv(excell_file_path, date_time_index=[], skiprows=0, format="%Y/%m/%d %H:%M:%S"):
"""
:param excell_file_path: excell文件路径,处理完成之后会在excell文件的路径下,生成以asv结尾的csv文件
:param date_time_index: 需要处理的时间日期所在的列
:param skiprows: 从第几行开始处理,默认不带字段名,如果有字段名,这skiprows=1,自动跳过第一行
:param format: excell文件里面日期的格式
:return:
"""
# headre=None,读取excell文件,认为excell文件里面第一行不是字段名
excell_dataframe = pd.read_excel(excell_file_path, header=None, skiprows=skiprows)
print(excell_dataframe)
for index in date_time_index:
# 遇到日期中有不是标准格式的日期,两种解决办法:1.errors="coerce",2.infer_datetime_format=True 两种方法都会把非标准日期,转换为空
excell_dataframe[index] = pd.to_datetime(excell_dataframe[index], format=format, errors="coerce")
# excell_dataframe[index] = pd.to_datetime(excell_dataframe[index], infer_datetime_format=True)
# 利用正则,把每个字段里面的换行调换掉
excell_dataframe = excell_dataframe.replace(to_replace=r"\n", value="", regex=True).replace(to_replace=r"\r", value="", regex=True).replace(to_replace=r"\r\n", value="", regex=True)
# 把读取的dataframe数据生成csv,index=False,不要行索引,header=None不要列名,sep="\001"以ascall1作为csv文件分隔符(此时在linux下,vi打开asv文件可以看到分隔符),分隔符可以自定义
excell_dataframe.to_csv("{}".format(excell_file_path.replace(".xlsx",".asv").replace(".xls", ".asv")), index=False, header=None, encoding='utf-8', sep='\001')
if __name__ == '__main__':
excell_to_csv('cc_complaint.xls', date_time_index=[1, 2], skiprows=1)
- cc_complaint.xls 文件,没有找到上传附件的方法,只能粘贴xls文件,注意每一行数据都会和下一行数据隔一个空行,有的字段里面有换行,所以一条数据可能在多行
案例编号 案例日期 消费时间 备注
1808118720 2018/8/14 18:14:19 2018/8/14 "2018/08/14 18:17:36 MCD009:
感谢反馈,留4009200205热线,故此案关闭。"
1808121500 2018/8/16 18:01:20 2018/8/16 18:01 "2018/08/16 18:09:30 MCD080:
已安抚顾客 告知会尽快处理
2018/08/16 18:20:46 MCD001:
联系餐厅孙经理,告知经理顾客来电诉求,经理了解。"
1808121498 2018/8/16 17:58:30 2018/8/16 17:58:30 "2018/08/16 18:05:29 MCD304:
在线记录核实反馈"
1808121493 2018/8/16 17:56:36 222222
1808121486 2018/8/16 17:52:10 2018/8/16 17:52:10
1808121485 2018/8/16 17:51:58 2018/8/16 17:51:58
1808121484 2018/8/16 17:51:54 2018/8/16 17:51:54
- cc_complaint.xls 文件图片如图