次の内容のwenda1.xlsxファイルがあります。
よくある質問レコードを1行にマージする必要があります。効果は次のとおりです。
注:よくある質問のレコードの場合、各行は||でスプライスされます。
次の内容で新しいtest1.pyを作成します。
# !/usr/bin/python3
# - *- coding: utf-8-*-import xlrd
# エクセルファイルを開き、ワークブックオブジェクトを作成します
rbook = xlrd.open_workbook('wenda1.xlsx')
# sheetメソッドはオブジェクトのリストを返します,[<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 ="" #クラスIの識別
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分類の値が空でない場合
# 第1レベルの分類IDを更新し、使用します#接続
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リストを1行に変換し、コンマでつなぎ合わせます
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':'こんにちは||客服こんにちは||こんにちは,客服'}]
上記の出力からわかります。複数の行を1行に結合し、よくある質問のレコードを辞書に書き込みます。次に、新しいテーブルに書き込むことができます。
完全なコードは次のとおりです。
# !/usr/bin/python3
# - *- coding: utf-8-*-import xlrd
# エクセルファイルを開き、ワークブックオブジェクトを作成します
rbook = xlrd.open_workbook('wenda1.xlsx')
# sheetメソッドはオブジェクトのリストを返します,[<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 ="" #クラスIの識別
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分類の値が空でない場合
# 第1レベルの分類IDを更新し、使用します#接続
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リストを1行に変換し、コンマでつなぎ合わせます
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分類","よくある質問の記録"]
# 最初の行を書く
for i inrange(0,len(row0)):
sheet1.write(0, i, row0[i])
# # jsonファイルをロードします
# withopen("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) #よくある質問の記録がある列
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が生成されます。
ファイルを開くと、効果は次のようになります。