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实现基于HTTP文件传输实例
Nov 08 Python
python实现的守护进程(Daemon)用法实例
Jun 02 Python
Python找出文件中使用率最高的汉字实例详解
Jun 03 Python
python简单文本处理的方法
Jul 10 Python
基于Django filter中用contains和icontains的区别(详解)
Dec 12 Python
python3中的md5加密实例
May 29 Python
Python 安装 virturalenv 虚拟环境的教程详解
Feb 21 Python
使用卷积神经网络(CNN)做人脸识别的示例代码
Mar 27 Python
python zip,lambda,map函数代码实例
Apr 04 Python
详解python tcp编程
Aug 24 Python
教你一分钟在win10终端成功安装Pytorch的方法步骤
Jan 28 Python
从Pytorch模型pth文件中读取参数成numpy矩阵的操作
Mar 04 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 类型转换函数intval
2009/06/20 PHP
php使用GD库创建图片缩略图的方法
2015/06/10 PHP
php rsa 加密,解密,签名,验签详解
2016/12/06 PHP
让回调函数 showResponse 也带上参数的代码
2007/08/13 Javascript
Ext.MessageBox工具类简介
2009/12/10 Javascript
JavaScript基础函数整理汇总
2015/01/30 Javascript
JavaScript通过字符串调用函数的实现方法
2015/03/18 Javascript
基于webpack-hot-middleware热加载相关错误的解决方法
2018/02/22 Javascript
layui 监听表格复选框选中值的方法
2018/08/15 Javascript
JS左右无缝轮播功能完整实例
2019/05/16 Javascript
JavaScript RegExp 对象用法详解
2019/09/24 Javascript
webpack DllPlugin xxx is not defined解决办法
2019/12/13 Javascript
[07:20]2014DOTA2西雅图国际邀请赛 选手讲解积分赛第二天
2014/07/11 DOTA
[02:36]DOTA2亚洲邀请赛小组赛精彩集锦:奇迹哥卡尔秀翻全场
2017/03/28 DOTA
Python删除指定目录下过期文件的2个脚本分享
2014/04/10 Python
Python3读取zip文件信息的方法
2015/05/22 Python
在Django中编写模版节点及注册标签的方法
2015/07/20 Python
python Django批量导入数据
2016/03/25 Python
Python实现动态加载模块、类、函数的方法分析
2017/07/18 Python
Python日期的加减等操作的示例
2017/08/15 Python
python3实现公众号每日定时发送日报和图片
2018/02/24 Python
Python文本统计功能之西游记用字统计操作示例
2018/05/07 Python
Django框架文件上传与自定义图片上传路径、上传文件名操作分析
2019/05/10 Python
python小程序之4名牌手洗牌发牌问题解析
2020/05/15 Python
viagogo意大利票务平台:演唱会、体育比赛、戏剧门票
2018/01/26 全球购物
汉森批发:Hansen Wholesale
2018/05/24 全球购物
六道php面试题附答案
2014/06/05 面试题
年度考核自我评价
2014/01/25 职场文书
小小商店教学反思
2014/04/27 职场文书
社会公德演讲稿
2014/05/20 职场文书
护士求职信范文
2014/05/24 职场文书
教师批评与自我批评材料
2014/10/16 职场文书
上课睡觉万能检讨书
2015/02/17 职场文书
2015年上半年计生工作总结
2015/03/30 职场文书
2015年乡镇扶贫工作总结
2015/04/08 职场文书
城镇居民医疗保险工作总结
2015/08/10 职场文书