python excel多行合并的方法


Posted in Python onDecember 09, 2020

一、概述
现有一个wenda1.xlsx文件,内容如下:

python excel多行合并的方法

需要将faq记录合并为一行,效果如下:

python excel多行合并的方法

注意:faq记录,每一行用||来拼接。

二、多行转换一行
新建test1.py,内容如下:

# !/usr/bin/python3
# -*- coding: utf-8 -*-
import xlrd

# 打开excel文件,创建一个workbook对象
rbook = xlrd.open_workbook('wenda1.xlsx')
# sheets方法返回对象列表,[<xlrd.sheet.Sheet object at 0x103f147f0>]
rbook.sheets()
# xls默认有3个工作簿,Sheet1,Sheet2,Sheet3
rsheet = rbook.sheet_by_index(0) # 取第一个工作簿

faq_tmp_dict = {} # FAQ临时字典
faq_formal_list = [] # FAQ正式列表
first_category_tag = "" # 一级分类标识
index = 0 # 索引

#循环工作簿的所有行
for row in rsheet.get_rows():
  index +=1

  first_category_row = row[0] # 1级分类所在的列
  first_category_value = first_category_row.value # 1级分类的值
  if first_category_value != '1级分类': # 排除第一行,这些都是列名
    if first_category_value: # 当1级分类的值不为空时
      # 更新一级分类标识,用#连接
      first_category_tag = "%s#%s"%(first_category_value,index)
      faq_like_column = row[1] # FAQ相似句所在的列
      faq_like_value = faq_like_column.value # FAQ相似句的值
      # 更新临时字典,不存在默认值为空字典,否则追加到列表中
      faq_tmp_dict.setdefault(first_category_tag, []).append(faq_like_value)
    else:
      # 当1级分类的值为空时
      faq_like_column = row[1] # FAQ相似句所在的列
      faq_like_value = faq_like_column.value
      faq_tmp_dict.setdefault(first_category_tag, []).append(faq_like_value)


print(faq_tmp_dict)
# 处理临时字典
for i in faq_tmp_dict:
  tmp_dict = {}
  # 一级分类,切割#号,取第一个
  first_category = i.split('#')[0]
  # print("first_category",first_category)
  # faq所有记录,将faq列表转换为一行,用逗号拼接
  faq_like_all = "||".join(faq_tmp_dict[i])
  # print("faq_merge",faq_all)
  tmp_dict['first_category'] = first_category
  tmp_dict['faq_like_all'] = faq_like_all
  faq_formal_list.append(tmp_dict)

print(faq_formal_list)

执行输出:

{'闲聊#2': ['不在吗?', '你好在吗?', '你在不在', '有人在么。', '你好?', '在么?说话啊', '客户在不在?'], '闲聊#9': ['你好', '客服你好', '你好,客服']}
[{'first_category': '闲聊', 'faq_like_all': '不在吗?||你好在吗?||你在不在||有人在么。||你好?||在么?说话啊||客户在不在?'}, {'first_category': '闲聊', 'faq_like_all': '你好||客服你好||你好,客服'}]

从上面输出内容,可以看出。将多行合并为一行,并且将faq记录写入到一个字典里面了。接下来就可以写入到新表格了。

三、写入新表格
完整代码如下:

# !/usr/bin/python3
# -*- coding: utf-8 -*-
import xlrd

# 打开excel文件,创建一个workbook对象
rbook = xlrd.open_workbook('wenda1.xlsx')
# sheets方法返回对象列表,[<xlrd.sheet.Sheet object at 0x103f147f0>]
rbook.sheets()
# xls默认有3个工作簿,Sheet1,Sheet2,Sheet3
rsheet = rbook.sheet_by_index(0) # 取第一个工作簿

faq_tmp_dict = {} # FAQ临时字典
faq_formal_list = [] # FAQ正式列表
first_category_tag = "" # 一级分类标识
index = 0 # 索引

#循环工作簿的所有行
for row in rsheet.get_rows():
  index +=1

  first_category_row = row[0] # 1级分类所在的列
  first_category_value = first_category_row.value # 1级分类的值
  if first_category_value != '1级分类': # 排除第一行,这些都是列名
    if first_category_value: # 当1级分类的值不为空时
      # 更新一级分类标识,用#连接
      first_category_tag = "%s#%s"%(first_category_value,index)
      faq_like_column = row[1] # FAQ相似句所在的列
      faq_like_value = faq_like_column.value # FAQ相似句的值
      # 更新临时字典,不存在默认值为空字典,否则追加到列表中
      faq_tmp_dict.setdefault(first_category_tag, []).append(faq_like_value)
    else:
      # 当1级分类的值为空时
      faq_like_column = row[1] # FAQ相似句所在的列
      faq_like_value = faq_like_column.value
      faq_tmp_dict.setdefault(first_category_tag, []).append(faq_like_value)


print(faq_tmp_dict)
# 处理临时字典
for i in faq_tmp_dict:
  tmp_dict = {}
  # 一级分类,切割#号,取第一个
  first_category = i.split('#')[0]
  # print("first_category",first_category)
  # faq所有记录,将faq列表转换为一行,用逗号拼接
  faq_like_all = "||".join(faq_tmp_dict[i])
  # print("faq_merge",faq_all)
  tmp_dict['first_category'] = first_category
  tmp_dict['faq_like_all'] = faq_like_all
  faq_formal_list.append(tmp_dict)

print(faq_formal_list)

import xlwt
import json
f = xlwt.Workbook()
sheet1 = f.add_sheet('Sheet1', cell_overwrite_ok=True)
row0 = ["1级分类", "faq记录"]

# 写第一行
for i in range(0, len(row0)):
  sheet1.write(0, i, row0[i])

# # 加载json文件
# with open("tj.json", 'r') as load_f:
#   load_dict = json.load(load_f) # 反序列化文件
#
num = 0 # 计数器
max_length = 0 # 最大长度
for i in faq_formal_list:
  num+=1 # 自增1

  faq_col = sheet1.col(1) # faq记录所在的列
  length = len(i['faq_like_all']) # 计算长度
  # print("长度",length)
  # 更新最大长度
  if max_length < length:
    max_length = length

  # 设置表格宽度
  faq_col.width = max_length * 20* 20
  # 写入库名
  sheet1.write(num, 0, i['first_category'])
  # faq_like_str = "||".join(i['faq_like_all'])
  sheet1.write(num, 1, i['faq_like_all'])

# 保存到表格
f.save('test1.xls')

执行代码,它会生成一个test1.xlsx。

打开文件,效果如下:

python excel多行合并的方法

以上就是python excel多行合并的方法的详细内容,更多关于python excel多行合并的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Linux 发邮件磁盘空间监控(python)
Apr 23 Python
python实现中文转换url编码的方法
Jun 14 Python
浅谈numpy中linspace的用法 (等差数列创建函数)
Jun 07 Python
详解Python map函数及Python map()函数的用法
Nov 16 Python
python微信公众号开发简单流程
Mar 23 Python
Python 16进制与中文相互转换的实现方法
Jul 09 Python
python打包生成的exe文件运行时提示缺少模块的解决方法
Oct 31 Python
python手机号前7位归属地爬虫代码实例
Mar 31 Python
Python实现封装打包自己写的代码,被python import
Jul 12 Python
浅析Python 字符编码与文件处理
Sep 24 Python
python 实时调取摄像头的示例代码
Nov 25 Python
Python 实现二叉查找树的示例代码
Dec 21 Python
PyTorch中的拷贝与就地操作详解
Dec 09 #Python
python 调用Google翻译接口的方法
Dec 09 #Python
浅析Python 中的 WSGI 接口和 WSGI 服务的运行
Dec 09 #Python
python dir函数快速掌握用法技巧
Dec 09 #Python
5 分钟读懂Python 中的 Hook 钩子函数
Dec 09 #Python
Python爬虫教程之利用正则表达式匹配网页内容
Dec 08 #Python
Python创建文件夹与文件的快捷方法
Dec 08 #Python
You might like
PHP添加MySQL数据记录代码
2008/06/07 PHP
PHP中的float类型使用说明
2010/07/27 PHP
教你如何使用php session
2013/10/28 PHP
PHP 正则表达式常用函数
2014/08/17 PHP
常见php数据文件缓存类汇总
2014/12/05 PHP
Yii清理缓存的方法
2016/01/06 PHP
php操纵mysqli数据库的实现方法
2016/09/18 PHP
Prototype 工具函数 学习
2009/07/23 Javascript
10个基于Jquery的幻灯片插件教程
2010/10/29 Javascript
ExtJS4 组件化编程,动态加载,面向对象,Direct
2011/05/12 Javascript
40个新鲜出炉的jQuery 插件和免费教程[上]
2012/07/24 Javascript
jQuery实现感应鼠标动画效果自动伸长的输入框实例
2015/02/24 Javascript
jquery实现图片上传前本地预览
2017/04/28 jQuery
nodejs中用npm初始化来创建package.json的实例讲解
2018/10/10 NodeJs
JS通用方法触发点击事件代码实例
2020/02/17 Javascript
vue实现购物车加减
2020/05/30 Javascript
[25:45]2018DOTA2亚洲邀请赛4.5SOLO赛 Sylar vs Paparazi
2018/04/06 DOTA
Python人工智能之路 jieba gensim 最好别分家之最简单的相似度实现
2019/08/13 Python
python 实现二维字典的键值合并等函数
2019/12/06 Python
pandas 中对特征进行硬编码和onehot编码的实现
2019/12/20 Python
Django中modelform组件实例用法总结
2020/02/10 Python
python 爬取B站原视频的实例代码
2020/09/09 Python
详解Django ORM引发的数据库N+1性能问题
2020/10/12 Python
html5指南-5.使用web storage存储键值对的数据
2013/01/07 HTML / CSS
俄罗斯的精英皮具:Wittchen
2018/01/29 全球购物
如何提高SQL Server的安全性
2016/07/25 面试题
园艺师求职信
2014/04/27 职场文书
工伤事故赔偿协议书范文
2014/09/24 职场文书
县人大领导班子四风对照检查材料思想汇报
2014/10/09 职场文书
2014年员工工作总结范文
2014/11/18 职场文书
2016年寒假社会实践活动总结
2015/03/27 职场文书
行政诉讼答辩状
2015/05/21 职场文书
公司保密管理制度
2015/08/04 职场文书
小学生教师节广播稿
2015/08/19 职场文书
医德医风学习心得体会
2016/01/25 职场文书
一文搞懂python异常处理、模块与包
2021/06/26 Python