「さはら3」です。
AI副業でどこまでいけるのか?をテーマに頑張っていきたいと思います。
頭の体操
- 1か所だけ異なる漢字が入っています。(解答は一番最後に掲載)
本編
以前の記事(AI副業:WindowsのビルドバージョンとKBの対比表をPythonで作りたい。 - Sahara3のAI副業)で作成した対比表ですが
どうせなら、Windowsバージョンとの対比表にマージしてしまおうと思い立ちバージョンアップしました。
最新対比表(2023年8月以降分のみ)
Availability date | Version | Build | KB article |
---|---|---|---|
2023/10/10 | Windows 11 22H2 | 22621.2428 | KB5031354 |
2023/10/10 | Windows 11 21H2 | 22000.2538 | KB5031358 |
2023/10/10 | Windows 10 22H2 | 19045.357 | KB5031356 |
2023/10/10 | Windows 10 21H2 | 19044.357 | KB5031356 |
2023/10/10 | Windows 10 1809 | 17763.4974 | KB5031361 |
2023/10/10 | Windows 10 1607 | 14393.6351 | KB5031362 |
2023/10/10 | Windows 10 1507 | 10240.20232 | KB5031377 |
2023/9/26 | Windows 11 22H2 | 22621.2361 | KB5030310 |
2023/9/26 | Windows 11 21H2 | 22000.2482 | KB5030301 |
2023/9/26 | Windows 10 22H2 | 19045.3516 | KB5030300 |
2023/9/12 | Windows 11 22H2 | 22621.2283 | KB5030219 |
2023/9/12 | Windows 11 21H2 | 22000.2416 | KB5030217 |
2023/9/12 | Windows 10 22H2 | 19045.3448 | KB5030211 |
2023/9/12 | Windows 10 21H2 | 19044.3448 | KB5030211 |
2023/9/12 | Windows 10 1809 | 17763.4851 | KB5030214 |
2023/9/12 | Windows 10 1607 | 14393.6252 | KB5030213 |
2023/9/12 | Windows 10 1507 | 10240.20162 | KB5030220 |
2023/8/22 | Windows 11 22H2 | 22621.2215 | KB5029351 |
2023/8/22 | Windows 11 21H2 | 22000.236 | KB5029332 |
2023/8/22 | Windows 10 22H2 | 19045.3393 | KB5029331 |
2023/8/8 | Windows 11 22H2 | 22621.2134 | KB5029263 |
2023/8/8 | Windows 11 21H2 | 22000.2295 | KB5029253 |
2023/8/8 | Windows 10 22H2 | 19045.3324 | KB5029244 |
2023/8/8 | Windows 10 21H2 | 19044.3324 | KB5029244 |
2023/8/8 | Windows 10 1809 | 17763.4737 | KB5029247 |
2023/8/8 | Windows 10 1607 | 14393.6167 | KB5029242 |
2023/8/8 | Windows 10 1507 | 10240.20107 | KB5029259 |
スクリプト
import requests from bs4 import BeautifulSoup import csv import os import pandas as pd import re def get_web_data(URL): response = requests.get(URL) web_source = response.text # Clean up the web source web_source = web_source.replace("\n", "").replace("\r", "") for _ in range(100): web_source = web_source.replace("> ", ">").replace(">\t", ">").replace(" <", "<").replace("\t<", "<").replace("\t", "") web_source = web_source.replace("><", ">\r\n<") with open(r"c:\temp\OS_Build_temp.csv", "w", encoding="utf-8") as f: writer = csv.writer(f, delimiter="\t") writer.writerow(["Servicing option", "Availability date", "Build", "KB article"]) soup = BeautifulSoup(web_source, "html.parser") for i in range(100): table = soup.find("table", {"id": f"historyTable_{i}"}) if table: rows = table.find_all("tr") for row in rows: cols = row.find_all(["td", "th"]) cols = [ele.text.strip() for ele in cols] with open(r"c:\temp\OS_Build_temp.csv", "a", encoding="utf-8") as f: writer = csv.writer(f, delimiter="\t") writer.writerow(cols) os_build_versions = [] for line in web_source.split("\r\n"): if re.search(r"OS\s*Build", line, re.IGNORECASE): os_build_version = BeautifulSoup(line, "html.parser").get_text() os_build_version = os_build_version.replace("- End of servicing", "").replace("Version ", "").replace("(RTM) ", "").replace(" ", "") # "OS build"の後の数字を取得 build_number = os_build_version.split("(OSbuild")[1].split(")")[0] # 数字が1で始まる場合はWindows 10、2で始まる場合はWindows 11と判断 if build_number.startswith("1"): os_build_version = "Windows 10 " + os_build_version elif build_number.startswith("2"): os_build_version = "Windows 11 " + os_build_version formatted_version = os_build_version.replace("(OSbuild", "\t").replace(")", "") os_build_versions.append(formatted_version.split("\t")) # os_build_versionを画面に表示 # print(formatted_version) with open(r"C:\temp\OS_Build_Version_temp.csv", "a", encoding="utf-8") as f: writer = csv.writer(f, delimiter="\t") writer.writerows(os_build_versions) rep_os_build_versions = [] for version in os_build_versions: if len(version) > 1: # versionが2つ以上の要素を持つ場合のみ処理を進める os_ver = "Windows 10 " + version[0] # Assuming WinName is "Windows 10" rep_os_build_versions.append([os_ver, version[1]]) with open(r"C:\temp\OS_Build_Version.csv", "a", encoding="utf-8") as f: writer = csv.writer(f, delimiter="\t") writer.writerow(["Version", "Build"]) writer.writerows(rep_os_build_versions) # この関数の最後で、データフレームを返すように変更 df = pd.read_csv(r"c:\temp\OS_Build_temp.csv", delimiter="\t", encoding="utf-8") return df def remove_duplicates_and_save(dataframes): # 2つのデータフレームを結合 combined_df = pd.concat(dataframes, ignore_index=True) # 重複を排除 combined_df = combined_df.drop_duplicates() # 指定されたカラムだけを持つデータフレームを作成 combined_df = combined_df[["Availability date", "Build", "KB article"]] # 'Availability date' で降順にソート combined_df = combined_df.sort_values(by=["Availability date", "Build"], ascending=[False, False]) # "Availability date" が "Availability date" である行を削除 combined_df = combined_df[combined_df["Availability date"] != "Availability date"] # CSVファイルとして保存 combined_df.to_csv(r"c:\temp\OS_Build.csv", index=False, encoding="utf-8", header=True) def delete_files(file_paths): """ 指定されたファイルパスのファイルを削除します。 Args: file_paths: 削除するファイルパスのリスト。 """ for file_path in file_paths: os.remove(file_path) def sort_and_save_csv(): # ファイルを読み込む df = pd.read_csv(r"C:\temp\OS_Build_Version_temp.csv", delimiter="\t", encoding="utf-8") # 'Build'で降順にソート df = df.sort_values(by="Build", ascending=False) # CSVファイルとして保存 df.to_csv(r"C:\temp\OS_Build_Version_temp.csv", index=False, encoding="utf-8", header=True) def merge_csv_files(): # CSVファイルを読み込む df_os_build = pd.read_csv(r"C:\temp\OS_Build.csv", encoding="utf-8") # カラムを','で分割 df_os_build_version_temp = pd.read_csv(r"C:\temp\OS_Build_Version_temp.csv", delimiter=",", encoding="utf-8") # Buildカラムの'.'の前の部分だけを取得して新しいカラムとして追加 df_os_build['Build_key'] = df_os_build['Build'].astype(str).str.split(".").str[0] df_os_build_version_temp['Build_key'] = df_os_build_version_temp['Build'].astype(str).str.split(".").str[0] # 両方のデータフレームを'Build_key'カラムでマージする merged_df = pd.merge(df_os_build, df_os_build_version_temp, on='Build_key', how='left') # 'Version'カラムがNaNの場合、その行を削除する merged_df = merged_df.dropna(subset=['Version']) # 不要な'Build_key'カラムを削除 merged_df.drop(columns=['Build_key'], inplace=True) # マージしたデータフレームをCSVファイルとして保存 merged_df.to_csv(r"C:\temp\OS_Build_Merged.csv", index=False, encoding="utf-8") def reorder_and_save_csv(): # CSVファイルを読み込む df = pd.read_csv(r"C:\temp\OS_Build_Merged.csv", encoding="utf-8") # カラムの順番を指定された順番に並べ替え df = df[['Availability date', 'Version', 'Build_x', 'KB article']] # 'Build_x'のカラム名を'Build'に変更 df.rename(columns={'Build_x': 'Build'}, inplace=True) # CSVファイルとして保存 df.to_csv(r"C:\temp\OS_Build_Merged.csv", index=False, encoding="utf-8") if __name__ == "__main__": # ファイルをクリア with open(r"C:\temp\OS_Build_Version_temp.csv", "w", encoding="utf-8") as f: writer = csv.writer(f, delimiter="\t") writer.writerow(["Version", "Build"]) dataframes = [] URL = 'https://learn.microsoft.com/en-us/windows/release-health/release-information' dataframes.append(get_web_data(URL)) URL = 'https://learn.microsoft.com/en-us/windows/release-health/windows11-release-information' dataframes.append(get_web_data(URL)) # 2つのデータフレームを合算して処理 remove_duplicates_and_save(dataframes) # CSVファイルをソートして保存 sort_and_save_csv() # 関数を呼び出してCSVファイルをマージする merge_csv_files() # 関数を呼び出してCSVファイルのカラムを並べ替える reorder_and_save_csv() file_paths = [r"C:\temp\OS_Build_temp.csv", r"C:\temp\OS_Build_Version.csv"] delete_files(file_paths)
解説
- 前回作成した以下の表のBuildの一部と
Availability date | Build | KB article |
---|---|---|
2023-10-10 | 22621.2428 | KB5031354 |
2023-10-10 | 22000.2538 | KB5031358 |
2023-10-10 | 19045.3570 | KB5031356 |
2023-10-10 | 19044.3570 | KB5031356 |
2023-10-10 | 17763.4974 | KB5031361 |
2023-10-10 | 14393.6351 | KB5031362 |
2023-10-10 | 10240.20232 | KB5031377 |
- 今回新たに抽出した以下の表のBuildの情報
Version | Build |
---|---|
Windows 11 22H2 | 22621 |
Windows 11 21H2 | 22000 |
Windows 10 22H2 | 19045 |
Windows 10 21H2 | 19044 |
Windows 10 21H1 | 19043 |
Windows 10 1809 | 17763 |
Windows 10 1607 | 14393 |
Windows 10 1507 | 10240 |
- 上記2つの情報をマッチングさせて、最終的に以下の表を作成しました。
Availability date | Version | Build | KB article |
---|---|---|---|
2023/10/10 | Windows 11 22H2 | 22621.2428 | KB5031354 |
2023/10/10 | Windows 11 21H2 | 22000.2538 | KB5031358 |
2023/10/10 | Windows 10 22H2 | 19045.357 | KB5031356 |
2023/10/10 | Windows 10 21H2 | 19044.357 | KB5031356 |
2023/10/10 | Windows 10 1809 | 17763.4974 | KB5031361 |
2023/10/10 | Windows 10 1607 | 14393.6351 | KB5031362 |
2023/10/10 | Windows 10 1507 | 10240.20232 | KB5031377 |
まとめ
Windowsのバージョンと、ビルド番号、KB Articleの対比表が出来上がりました。
一般の方は、あまり認識がないかと思いますが、企業にお勤めの方にとって
多少は役に立ったでしょうか?
- この記事にすべての対比表を記載してしまうと、長くなってしまうので、別ページを作成予定です。(少々お待ちください。)
AI関連は日進月歩、日々之精進でございます。
最後まで読んで頂きありがとうございました。
AIさはら
頭の体操:解答
- みつかりましたか?
本日のAI着物美女
良かったらInstagramのフォローをお願いします。
https://www.instagram.com/ai_kimono_bijo/
非アダルトで運営しておりますので、職場でも安心して堪能いただけます。