pythonexcel複数行マージ

I.概要#

次の内容のwenda1.xlsxファイルがあります。

よくある質問レコードを1行にマージする必要があります。効果は次のとおりです。

注:よくある質問のレコードの場合、各行は||でスプライスされます。

2つ、複数の行を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行に結合し、よくある質問のレコードを辞書に書き込みます。次に、新しいテーブルに書き込むことができます。

3つ目は、新しいフォームを作成する#

完全なコードは次のとおりです。

# !/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が生成されます。

ファイルを開くと、効果は次のようになります。

Recommended Posts

pythonexcel複数行マージ
Python操作Excelマージセル
PythonでExcelを読む方法
Excelを比較し、Pythonウィンドウ関数を学ぶ
pythonでexcelテーブルを処理する方法
Pythonはパンダを使用してExcelデータを処理します