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 list排序的两种方法及实例讲解
Mar 20 Python
Python+Socket实现基于UDP协议的局域网广播功能示例
Aug 31 Python
Python语言实现百度语音识别API的使用实例
Dec 13 Python
用Python删除本地目录下某一时间点之前创建的所有文件的实例
Dec 14 Python
python实现抖音视频批量下载
Jun 20 Python
Python爬取qq空间说说的实例代码
Aug 17 Python
elasticsearch python 查询的两种方法
Aug 04 Python
wxPython实现文本框基础组件
Nov 18 Python
基于spring boot 日志(logback)报错的解决方式
Feb 20 Python
Selenium结合BeautifulSoup4编写简单的python爬虫
Nov 06 Python
解决python 在for循环并且pop数组的时候会跳过某些元素的问题
Dec 11 Python
python字典与json转换的方法总结
Dec 28 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生成文件
2007/01/15 PHP
PHP模块 Memcached功能多于Memcache
2011/06/14 PHP
关于php循环跳出的问题
2013/07/01 PHP
PHP 面向对象程序设计(oop)学习笔记(三) - 单例模式和工厂模式
2014/06/12 PHP
php学习笔记之面向对象
2014/11/08 PHP
PHP如何使用cURL实现Get和Post请求
2020/07/11 PHP
JS函数验证总结(方便js客户端输入验证)
2010/10/29 Javascript
jquery实现图片渐变切换兼容ie6/Chrome/Firefox
2013/08/02 Javascript
Javascript中Event属性搜集整理
2013/09/17 Javascript
结合JQ1.9通过js正则判断各种浏览器版本的方法
2013/12/30 Javascript
javascript(js)的小数点乘法除法问题详解
2014/03/07 Javascript
jQuery实现移动端滑块拖动选择数字效果
2015/12/24 Javascript
关于Bootstrap弹出框无法调用问题的解决办法
2016/03/10 Javascript
JavaScript动态添加事件之事件委托
2016/07/12 Javascript
JavaScript——DOM操作——Window.document对象详解
2016/07/14 Javascript
详解jQuery简单的表单应用
2016/12/16 Javascript
vue完成项目后,打包成静态文件的方法
2018/09/03 Javascript
详解如何用webpack4从零开始构建react开发环境
2019/01/27 Javascript
微信小程序实现卡片层叠滑动效果
2019/06/21 Javascript
原生JS实现顶部导航栏显示按钮+搜索框功能
2019/12/25 Javascript
JavaScript中ES6规范中let和const的用法和区别
2020/08/06 Javascript
[02:11]完美世界DOTA2联赛10月28日赛事精彩集锦:来吧展示实力强劲
2020/10/29 DOTA
python中的实例方法、静态方法、类方法、类变量和实例变量浅析
2014/04/26 Python
Python使用cx_Oracle模块操作Oracle数据库详解
2018/05/07 Python
Django 多语言教程的实现(i18n)
2018/07/07 Python
Python写一个基于MD5的文件监听程序
2019/03/11 Python
pyqt5 实现多窗口跳转的方法
2019/06/19 Python
python实现AdaBoost算法的示例
2020/10/03 Python
施华洛世奇德国官网:SWAROVSKI德国
2017/02/01 全球购物
材料员岗位职责
2014/03/13 职场文书
银行爱岗敬业演讲稿
2014/05/05 职场文书
房屋维修协议书范本
2014/09/25 职场文书
2014年大学班级工作总结
2014/11/14 职场文书
上课睡觉万能检讨书
2015/02/17 职场文书
停课通知书
2015/04/24 职场文书
Pycharm远程调试和MySQL数据库授权问题
2022/03/18 MySQL