# PythonによるWebサイトからのExcelファイルの自動ダウンロードとExcelブックの自動更新
# 経済調査会の「建設資材価格指数」のデータをWebサイトから収集し、主ファイル(建設資材価格指数.xlsx)を更新する
# 必要なモジュールを呼び出す
import os
import pandas as pd
import xlsxwriter
import openpyxl
import urllib
# 主ファイルがあるディレクトリ「dir」を指定する
dir = r'C:\Users\......\......\......\......\......'
# Webサイトからダウンロードするファイルの「url」を4つ指定してリスト化する
url = ['https://www.zai-keicho.or.jp/wp-content/uploads/2022/10/12_index_by_cities_building-1.xlsx', # ★ 1建設資材価格指数(建築)
'https://www.zai-keicho.or.jp/wp-content/uploads/2022/10/15_ready-mixed_concrete_building-1.xlsx', # ★ 2生コンクリート(建築)
'https://www.zai-keicho.or.jp/wp-content/uploads/2022/10/20_ordinary_steel_products_building-1.xlsx', # ★ 3普通鋼鋼材(建築)
'https://www.zai-keicho.or.jp/wp-content/uploads/2022/10/23_wood_products_building-1.xlsx' # ★ 4木材(建築)
]
# ダウンロードデータによって更新する主ファイルの既存のシート名「shi」を指定してリスト化する(ダウンロードするファイル名の一部にも使用)
shi = ['建設資材価格指数','生コンクリート','普通鋼鋼材','木材']
# ダウンロードしてローカルファイルとして保存するファイルのパスを格納するリスト
lpathlist = []
# 以下の作業を4回繰り返す
for n in range(4):
# ダウンロードするファイルの拡張子を「ex」として取得する (「.xls」と「.xlsx」を区別するため)
fn,ex = os.path.splitext(url[n])
# ダウンロードするファイルをローカルファイルとして保存するときのファイル名「lnam」を指定し、パス「lpath」を生成してリスト化する
lnam = 'sizai_'+str(n+1)+shi[n]+ex
lpath = os.path.join(dir,lnam)
# Webサイトからファイルをダウンロードし、ローカルファイルのExcelブックとして保存し、その実行結果を画面表示する
data = urllib.request.urlopen(url[n]).read()
with open(lpath, mode="wb") as f:
f.write(data)
print('ダウンロードファイルを パス '+lpath+' に保存しました')
# パス「lpath」をリスト化する
lpathlist = lpathlist + [lpath]
# 主ファイルの名称「nam」を指定し、パス「path」を生成する
nam = '建設資材価格指数.xlsx'
path = os.path.join(dir,nam)
# 主ファイルを開き、 既存のシートを削除(4回繰り返し)してその実行結果を画面表示し、上書き保存して、主ファイルを閉じる
wb = openpyxl.load_workbook(path)
for n in range(4):
del wb[shi[n]]
print('ファイル名「'+nam+'」の既存のシート「'+shi[n]+'」を削除しました')
wb.save(path)
wb.close()
# 以下の作業を4回繰り返す
for n in range(4):
# 保存したローカルファイルのExcelブックからダウンロードデータを読み込み、シート名が「詳細(10都市)」のデータを「df」に格納する
df = pd.read_excel(lpathlist[n],sheet_name='詳細(10都市)')
# ダウンロードデータ「df」を、削除したシートと同じ名前「shi」で新規のシートとして書き込み、その実行結果を画面表示する
with pd.ExcelWriter(path, engine="openpyxl", mode="a") as writer:
df.to_excel(writer, sheet_name=shi[n],header=True,index=False)
print('ダウンロードデータから ファイル名「'+nam+'」のシート「'+shi[n]+'」を作成しました')
ダウンロードファイルを パス C:\Users\......\......\......\......\......\sizai_1建設資材価格指数.xlsx に保存しました
ダウンロードファイルを パス C:\Users\......\......\......\......\......\sizai_2生コンクリート.xlsx に保存しました
ダウンロードファイルを パス C:\Users\......\......\......\......\......\sizai_3普通鋼鋼材.xlsx に保存しました
ダウンロードファイルを パス C:\Users\......\......\......\......\......\sizai_4木材.xlsx に保存しました
ファイル名「建設資材価格指数.xlsx」の既存のシート「建設資材価格指数」を削除しました
ファイル名「建設資材価格指数.xlsx」の既存のシート「生コンクリート」を削除しました
ファイル名「建設資材価格指数.xlsx」の既存のシート「普通鋼鋼材」を削除しました
ファイル名「建設資材価格指数.xlsx」の既存のシート「木材」を削除しました
ダウンロードデータから ファイル名「建設資材価格指数.xlsx」のシート「建設資材価格指数」を作成しました
ダウンロードデータから ファイル名「建設資材価格指数.xlsx」のシート「生コンクリート」を作成しました
ダウンロードデータから ファイル名「建設資材価格指数.xlsx」のシート「普通鋼鋼材」を作成しました
ダウンロードデータから ファイル名「建設資材価格指数.xlsx」のシート「木材」を作成しました