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 相关文章推荐
python文件操作之目录遍历实例分析
May 20 Python
Python中数字以及算数运算符的相关使用
Oct 12 Python
Python解惑之整数比较详解
Apr 24 Python
Python基础知识_浅谈用户交互
May 31 Python
Python实现读取邮箱中的邮件功能示例【含文本及附件】
Aug 05 Python
python url 参数修改方法
Dec 26 Python
Python中字符串String的基本内置函数与过滤字符模块函数的基本用法
May 27 Python
python模拟键盘输入 切换键盘布局过程解析
Aug 15 Python
解决python replace函数替换无效问题
Jan 18 Python
利用python中集合的唯一性实现去重
Feb 11 Python
使用keras实现非线性回归(两种加激活函数的方式)
Jul 05 Python
pycharm-professional-2020.1下载与激活的教程
Sep 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中通过加号合并数组的一个简单方法分享
2011/01/27 PHP
extjs grid设置某列背景颜色和字体颜色的方法
2010/09/03 Javascript
multiSteps 基于Jquery的多步骤滑动切换插件
2011/07/22 Javascript
JavaScript Scoping and Hoisting 翻译
2012/07/03 Javascript
js中的eventType事件及其浏览器支持性介绍
2013/11/29 Javascript
jquery实现页面图片等比例放大缩小功能
2014/02/12 Javascript
日常收集整理的JavaScript常用函数方法
2015/12/10 Javascript
Chrome不支持showModalDialog模态对话框和无法返回returnValue问题的解决方法
2016/10/30 Javascript
Angularjs中的页面访问权限怎么设置
2016/11/11 Javascript
input获取焦点时底部菜单被顶上来问题的解决办法
2017/01/24 Javascript
web3.js增加eth.getRawTransactionByHash(txhash)方法步骤
2018/03/15 Javascript
详解Angularjs 自定义指令中的数据绑定
2018/07/19 Javascript
微信小程序性能优化之checkSession的使用
2019/03/06 Javascript
node.js监听文件变化的实现方法
2019/04/17 Javascript
Python随手笔记第一篇(2)之初识列表和元组
2016/01/23 Python
Python实现采用进度条实时显示处理进度的方法
2017/12/19 Python
Python PO设计模式的具体使用
2019/08/16 Python
使用python去除图片白色像素的实例
2019/12/12 Python
pytorch实现查看当前学习率
2020/06/24 Python
keras中epoch,batch,loss,val_loss用法说明
2020/07/02 Python
PHP如何设置和取得Cookie值
2015/06/30 面试题
见习期自我鉴定
2013/11/07 职场文书
大二学期个人自我评价
2014/01/13 职场文书
领导失职检讨书
2014/02/24 职场文书
调研汇报材料范文
2014/08/17 职场文书
党员志愿者活动方案
2014/08/28 职场文书
三好生演讲稿
2014/09/12 职场文书
写给导师的自荐信
2015/03/06 职场文书
健康证明
2015/06/19 职场文书
读书笔记格式
2015/07/02 职场文书
2015年清剿火患专项行动工作总结
2015/07/27 职场文书
调解协议书范本
2016/03/21 职场文书
MySQL常见优化方案汇总
2022/01/18 MySQL
Java设计模式之代理模式
2022/04/22 Java/Android
使用Nginx的访问日志统计PV与UV
2022/05/06 Servers
pnpm对npm及yarn降维打击详解
2022/08/05 Javascript