python excel多行合并的方法
一、概述
現(xiàn)有一個wenda1.xlsx文件,內(nèi)容如下:

需要將faq記錄合并為一行,效果如下:

注意:faq記錄,每一行用||來拼接。
二、多行轉(zhuǎn)換一行
新建test1.py,內(nèi)容如下:
# !/usr/bin/python3
# -*- coding: utf-8 -*-
import xlrd
# 打開excel文件,創(chuàng)建一個workbook對象
rbook = xlrd.open_workbook('wenda1.xlsx')
# sheets方法返回對象列表,[<xlrd.sheet.Sheet object at 0x103f147f0>]
rbook.sheets()
# xls默認(rèn)有3個工作簿,Sheet1,Sheet2,Sheet3
rsheet = rbook.sheet_by_index(0) # 取第一個工作簿
faq_tmp_dict = {} # FAQ臨時(shí)字典
faq_formal_list = [] # FAQ正式列表
first_category_tag = "" # 一級分類標(biāo)識
index = 0 # 索引
#循環(huán)工作簿的所有行
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: # 當(dāng)1級分類的值不為空時(shí)
# 更新一級分類標(biāo)識,用#連接
first_category_tag = "%s#%s"%(first_category_value,index)
faq_like_column = row[1] # FAQ相似句所在的列
faq_like_value = faq_like_column.value # FAQ相似句的值
# 更新臨時(shí)字典,不存在默認(rèn)值為空字典,否則追加到列表中
faq_tmp_dict.setdefault(first_category_tag, []).append(faq_like_value)
else:
# 當(dāng)1級分類的值為空時(shí)
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)
# 處理臨時(shí)字典
for i in faq_tmp_dict:
tmp_dict = {}
# 一級分類,切割#號,取第一個
first_category = i.split('#')[0]
# print("first_category",first_category)
# faq所有記錄,將faq列表轉(zhuǎn)換為一行,用逗號拼接
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)
執(zhí)行輸出:
{'閑聊#2': ['不在嗎?', '你好在嗎?', '你在不在', '有人在么。', '你好?', '在么?說話啊', '客戶在不在?'], '閑聊#9': ['你好', '客服你好', '你好,客服']}
[{'first_category': '閑聊', 'faq_like_all': '不在嗎?||你好在嗎?||你在不在||有人在么。||你好?||在么?說話啊||客戶在不在?'}, {'first_category': '閑聊', 'faq_like_all': '你好||客服你好||你好,客服'}]
從上面輸出內(nèi)容,可以看出。將多行合并為一行,并且將faq記錄寫入到一個字典里面了。接下來就可以寫入到新表格了。
三、寫入新表格
完整代碼如下:
# !/usr/bin/python3
# -*- coding: utf-8 -*-
import xlrd
# 打開excel文件,創(chuàng)建一個workbook對象
rbook = xlrd.open_workbook('wenda1.xlsx')
# sheets方法返回對象列表,[<xlrd.sheet.Sheet object at 0x103f147f0>]
rbook.sheets()
# xls默認(rèn)有3個工作簿,Sheet1,Sheet2,Sheet3
rsheet = rbook.sheet_by_index(0) # 取第一個工作簿
faq_tmp_dict = {} # FAQ臨時(shí)字典
faq_formal_list = [] # FAQ正式列表
first_category_tag = "" # 一級分類標(biāo)識
index = 0 # 索引
#循環(huán)工作簿的所有行
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: # 當(dāng)1級分類的值不為空時(shí)
# 更新一級分類標(biāo)識,用#連接
first_category_tag = "%s#%s"%(first_category_value,index)
faq_like_column = row[1] # FAQ相似句所在的列
faq_like_value = faq_like_column.value # FAQ相似句的值
# 更新臨時(shí)字典,不存在默認(rèn)值為空字典,否則追加到列表中
faq_tmp_dict.setdefault(first_category_tag, []).append(faq_like_value)
else:
# 當(dāng)1級分類的值為空時(shí)
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)
# 處理臨時(shí)字典
for i in faq_tmp_dict:
tmp_dict = {}
# 一級分類,切割#號,取第一個
first_category = i.split('#')[0]
# print("first_category",first_category)
# faq所有記錄,將faq列表轉(zhuǎn)換為一行,用逗號拼接
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 # 計(jì)數(shù)器
max_length = 0 # 最大長度
for i in faq_formal_list:
num+=1 # 自增1
faq_col = sheet1.col(1) # faq記錄所在的列
length = len(i['faq_like_all']) # 計(jì)算長度
# print("長度",length)
# 更新最大長度
if max_length < length:
max_length = length
# 設(shè)置表格寬度
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')
執(zhí)行代碼,它會生成一個test1.xlsx。
打開文件,效果如下:

以上就是python excel多行合并的方法的詳細(xì)內(nèi)容,更多關(guān)于python excel多行合并的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python黑魔法遠(yuǎn)程控制開機(jī)的實(shí)例
這篇文章主要介紹了Python黑魔法遠(yuǎn)程控制開機(jī)的實(shí)例,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)python的小伙伴們有很大的幫助,需要的朋友可以參考下2021-04-04
Jupyter Lab設(shè)置切換虛擬環(huán)境的實(shí)現(xiàn)步驟
本文主要介紹了Jupyter Lab設(shè)置切換虛擬環(huán)境的實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02
Python控制多進(jìn)程與多線程并發(fā)數(shù)總結(jié)
本篇文章主要介紹了Python控制多進(jìn)程與多線程并發(fā)數(shù),詳細(xì)講訴了進(jìn)程和線程的區(qū)別,并介紹了處理方法,有需要的朋友可以了解一下。2016-10-10
python基于urllib實(shí)現(xiàn)按照百度音樂分類下載mp3的方法
這篇文章主要介紹了python基于urllib實(shí)現(xiàn)按照百度音樂分類下載mp3的方法,涉及Python使用urllib模塊操作頁面元素的相關(guān)技巧,需要的朋友可以參考下2015-05-05
Django如何實(shí)現(xiàn)網(wǎng)站注冊用戶郵箱驗(yàn)證功能
這篇文章主要介紹了Django如何實(shí)現(xiàn)網(wǎng)站注冊用戶郵箱驗(yàn)證功能,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08
使用Python對網(wǎng)易云歌單數(shù)據(jù)分析及可視化
這篇文章主要介紹了使用Python對網(wǎng)易云歌單數(shù)據(jù)分析及可視化,本項(xiàng)目以數(shù)據(jù)采集、處理、分析及數(shù)據(jù)可視化為項(xiàng)目流程,需要的朋友可以參考下2023-03-03
Centos環(huán)境部署django項(xiàng)目的全過程(永久復(fù)用)
Django是一款針對Python環(huán)境的WEB開發(fā)框架,能夠幫助我們構(gòu)架快捷,下面這篇文章主要給大家介紹了關(guān)于Centos環(huán)境部署django項(xiàng)目的相關(guān)資料,需要的朋友可以參考下2022-10-10
Python reduce()函數(shù)的用法小結(jié)
reduce()函數(shù)即為化簡函數(shù),它的執(zhí)行過程為:每一次迭代,都將上一次的迭代結(jié)果,需要的朋友可以參考下2017-11-11

