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 struct模块解析
Jun 12 Python
给Python的Django框架下搭建的BLOG添加RSS功能的教程
Apr 08 Python
Python中使用hashlib模块处理算法的教程
Apr 28 Python
python在linux系统下获取系统内存使用情况的方法
May 11 Python
用Python删除本地目录下某一时间点之前创建的所有文件的实例
Dec 14 Python
python flask中静态文件的管理方法
Mar 20 Python
python实现旋转和水平翻转的方法
Oct 25 Python
python numpy之np.random的随机数函数使用介绍
Oct 06 Python
python保留小数位的三种实现方法
Jan 07 Python
python生成并处理uuid的实现方式
Mar 03 Python
详解PyQt5信号与槽的几种高级玩法
Mar 24 Python
Python压缩模块zipfile实现原理及用法解析
Aug 14 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
模仿OSO的论坛(三)
2006/10/09 PHP
php解析url的三个示例
2014/01/20 PHP
浅谈本地WAMP环境的搭建
2015/05/13 PHP
php依赖注入知识点详解
2019/09/23 PHP
PHP使用递归按层级查找数据的方法
2019/11/10 PHP
Javascript实现的分页函数
2006/12/22 Javascript
自编jQuery插件实现模拟alert和confirm
2014/09/01 Javascript
在jQuery中处理XML数据的大致方法
2015/08/14 Javascript
JavaScript中的boolean布尔值使用学习及相关技巧讲解
2016/05/26 Javascript
Bootstrap3 内联单选和多选框
2016/12/29 Javascript
JavaScript实现学生在线做题计时器功能
2018/12/05 Javascript
微信小程序订阅消息(java后端实现)开发
2020/06/01 Javascript
python 循环while和for in简单实例
2016/08/16 Python
Numpy数组的保存与读取方法
2018/04/04 Python
Python文件常见操作实例分析【读写、遍历】
2018/12/10 Python
解决pytorch GPU 计算过程中出现内存耗尽的问题
2019/08/19 Python
wxpython绘制圆角窗体
2019/11/18 Python
python的Jenkins接口调用方式
2020/05/12 Python
python打包多类型文件的操作方法
2020/09/21 Python
关于探究python中sys.argv时遇到的问题详解
2021/02/23 Python
CSS3实现曲线阴影和翘边阴影
2016/05/03 HTML / CSS
Shoes For Crews法国官网:美国领先的防滑鞋设计和制造商
2018/01/01 全球购物
Ariat英国官网:为世界顶级马术运动员制造最优质的鞋类和服装
2020/02/14 全球购物
毕业生优秀推荐信
2013/11/26 职场文书
营销人才自我鉴定范文
2013/12/25 职场文书
大学生职业生涯规划书范文
2014/01/04 职场文书
监察建议书范文
2014/03/12 职场文书
党员承诺书怎么写
2014/05/20 职场文书
白岩松演讲
2014/05/21 职场文书
重阳节活动总结
2014/08/27 职场文书
党员干部观看《周恩来四个昼夜》思想汇报
2014/09/10 职场文书
股东授权委托书范本
2014/09/13 职场文书
党的群众路线教育实践活动对照检查剖析材料
2014/10/09 职场文书
民主评议政风行风活动心得体会
2014/10/29 职场文书
法律意见书范本
2015/06/04 职场文书
python opencv检测直线 cv2.HoughLinesP的实现
2021/06/18 Python