全体まとめページは↓より。
やりたいこと
・「行き先」「天気」の項目があるデータを読み込んで、①行き先 ②天気の順にソートして出力ファイルに保存する。
フォルダ構成
VSCodeで実行するときはprg配下を開いてpyファイルを作り実行する。
実装
import os
import openpyxl
from operator import itemgetter
#辞書リストの作成関数
def make_shipment(sh):
shipment_list = []
for row in sh.iter_rows():
if row[0].row == 1:
header_cells = row
else:
row_dic = {}
for v, k in zip(header_cells, row):
row_dic[v.value] = k.value
shipment_list.append(row_dic)
return shipment_list
#ファイル名を入力させる
print("ファイル名を入力:")
filename = input()
#読み込みファイルパスを作成
infile_path = os.path.join("..\indata" , filename)
#読み込みファイルからオブジェクトを生成
iwb = openpyxl.load_workbook(infile_path)
ish = iwb.active
#出力ファイルパスを作成
outfile_path = os.path.join("..\outdata", filename)
#出力ファイルのオブジェクトを生成
owb = openpyxl.Workbook()
osh = owb.active
#辞書リストを作成
shipment_list = make_shipment(ish)
#★1:行き先、2:天気の順でソートする
sorted_list = sorted(shipment_list,key=itemgetter("行き先", "天気"))
#転記先ヘッダ処理
list_row = 1
osh.cell(list_row,1).value = "index"
osh.cell(list_row,2).value = "行き先"
osh.cell(list_row,3).value = "天気"
#転記処理
for dic in sorted_list:
list_row += 1
osh.cell(list_row,1).value = dic["index"]
osh.cell(list_row,2).value = dic["行き先"]
osh.cell(list_row,3).value = dic["天気"]
#パターン1のファイルを保存
owb.save(outfile_path)
※本内容ではishオブジェクトからデータを取り込んでおり、辞書データは特に使用していない。
(複合的なデータの取り扱いを考えると辞書データを使うほうが良いと思われるので、今後改善予定)
出力結果
「行き先」>「天気」の順でソートされている。
以上