『退屈なことはPythonにやらせよう』16章 CSVファイルとJONデータの操作のらくがき帳📝
こんにちは。aliceです。
最近はネトフリ廃人をしています。これで止めようと思いつつ、あと1話、あと1話となるのはなぜでしょう。
おそろしい😱
ちなみに見ているのはこちらです。
次々と起こるカオスな展開が気になって終われない🤣
ネトフリだとseason1だけなんですね。
最後まで一気見したいです…。
さて、今回はCSVファイルとJONデータの操作のらくがき帳です。
いやー、久しぶりに本のとおりやりました💪
お久しぶりです、JSON。
やっぱりAPIは良いですね😀
給与や人事ソフトのAPIを使うとどんなことができんだろう?と考えながら遊んでいました。
本当は勤怠ソフトでAPIを使いたいのですが、もうちょっと公開してほしいなぁ…。
前回のらくがき帳
では、以下らくがきです。
16章 英語版🔤
GitHub💖
16.2 プロジェクト:CSVファイルから見出しを削除する
複数のCSVファイルの見出し(1行目)を削除します。
CSVファイルって見出しがあったりなかったりしますよね…。
import csv
from pathlib import Path
def remove_header(input_path, output_dir):
# ファイルの読み込みとヘッダーの削除
csv_rows = []
with input_path.open() as csv_file_obj:
reader = csv.reader(csv_file_obj)
for idx, row in enumerate(reader):
if idx == 0: # 最初の行をスキップ
continue
csv_rows.append(row)
# 出力ファイルのパスを生成
output_path = output_dir / input_path.name
# ファイルの書き出し
with output_path.open('w', newline='') as csv_file_obj:
writer = csv.writer(csv_file_obj)
writer.writerows(csv_rows)
def main():
# 'headerRemoved' ディレクトリが存在しない場合は作成します。
output_dir = Path('headerRemoved')
output_dir.mkdir(exist_ok=True)
# 現在の作業ディレクトリ内のすべての .csv ファイルに対して処理を行います。
for csv_path in Path('.').glob('*.csv'):
print(f'{csv_path} からヘッダーを削除しています...')
remove_header(csv_path, output_dir)
print('完了しました。')
if __name__ == "__main__":
main()
pandas編🐼
from pathlib import Path
import pandas as pd
def remove_header(input_path, output_dir):
# CSV ファイルを読み込みます。
df = pd.read_csv(input_path)
# ヘッダー行を削除して新しいデータフレームを作成します。
df_no_header = df.iloc[1:]
# 出力ファイルのパスを生成
output_path = output_dir / input_path.name
# 新しいデータフレームを CSV ファイルに書き込みます。
df_no_header.to_csv(output_path, index=False, header=None)
def main():
# 'headerRemoved' ディレクトリが存在しない場合は作成します。
output_dir = Path('headerRemoved')
output_dir.mkdir(exist_ok=True)
# 現在の作業ディレクトリ内のすべての .csv ファイルに対して処理を行います。
for csv_path in Path('.').glob('*.csv'):
print(f'{csv_path} からヘッダーを削除しています...')
remove_header(csv_path, output_dir)
print('完了しました。')
if __name__ == "__main__":
main()
16.5 プロジェクト:現在の天気予報データを取得する
久しぶりのJSONとAPI🌞
「Day after tomorrow」という言葉の響きが好きです。
import json
import requests
def get_weather(location):
# OpenWeatherMap.orgのAPIからJSONデータをダウンロードします。
base_url = 'http://api.openweathermap.org/data/2.5/forecast/daily?'
param_dict = {'q': location, 'cnt': 3, }
response = requests.get(base_url, params=param_dict)
response.raise_for_status()
# JSONデータをPythonの変数に読み込みます。
weather_data = json.loads(response.text)
return weather_data
def print_weather_info(location, day, weather):
print(f'{day}:')
print(weather['weather'][0]['main'], '-', weather['weather'][0]['description'])
print()
def main():
# ここでlocationを直接指定します
location = 'Tokyo,JP' # 例: Tokyo,JP
weather_data = get_weather(location)
w = weather_data['list']
print('Current weather in %s:' % (location))
print_weather_info(location, 'Today', w[0])
print_weather_info(location, 'Tomorrow', w[1])
print_weather_info(location, 'Day after tomorrow', w[2])
if __name__ == "__main__":
main()
16.8.1 ExcelからCSVへの変換
カレントディレクトリにあるすべてのExcelファイルを読み込んで、CSVファイルとして書き出しましょう。
import pathlib
import openpyxl
import csv
# カレントディレクトリ内のすべてのExcelファイルを取得
current_directory = pathlib.Path('.')
excel_files = list(current_directory.glob('*.xlsx')) # 拡張子が.xlsxのファイルを検索
for excel_file in excel_files:
# Excelファイルを読み込み
wb = openpyxl.load_workbook(excel_file)
# 最初のシートを選択
sheet = wb.active
# Excelファイルのベース名を取得し、拡張子を.csvに変更して保存
csv_file = excel_file.with_suffix('.csv')
# CSVファイルを書き込みモードで開き、newline=''を指定して改行コードの挿入を制御します。
with open(csv_file, 'w', newline='') as csvfile:
# CSVライターオブジェクトを作成し、引用符を最小限に設定します。
c = csv.writer(csvfile, quoting=csv.QUOTE_MINIMAL)
# Excelシート内の行を反復処理します。
for row in sheet.iter_rows():
# シート内のセルの値を取得し、CSVファイルに書き込む行を作成します。
c.writerow([cell.value for cell in row])
print(f'{excel_file} を {csv_file} に変換しました。')
pandas編🐼
import pathlib
import csv
from openpyxl import Workbook
# カレントディレクトリ内のすべてのCSVファイルを取得
current_directory = pathlib.Path('.')
csv_files = list(current_directory.glob('*.csv')) # 拡張子が.csvのファイルを検索
for csv_file in csv_files:
# CSVファイルのベース名を取得し、拡張子を.xlsxに変更して保存
excel_file = csv_file.with_suffix('.xlsx')
# 新しいExcelワークブックを作成
workbook = Workbook()
sheet = workbook.active
# CSVファイルを読み込み、Excelシートに書き込み
with open(csv_file, 'r', encoding='shift_jis') as csv_data:
csv_reader = csv.reader(csv_data)
for row in csv_reader:
sheet.append(row)
# Excelファイルを保存
workbook.save(excel_file)
print(f'{csv_file} を {excel_file} に変換しました。')
せっかくなのでカレントディレクトリのすべてのファイルをExcelにしてみました。
import pathlib
import csv
from openpyxl import Workbook
# カレントディレクトリ内のすべてのCSVファイルを取得
current_directory = pathlib.Path('.')
csv_files = list(current_directory.glob('*.csv')) # 拡張子が.csvのファイルを検索
for csv_file in csv_files:
# CSVファイルのベース名を取得し、拡張子を.xlsxに変更して保存
excel_file = csv_file.with_suffix('.xlsx')
# 新しいExcelワークブックを作成
workbook = Workbook()
sheet = workbook.active
# CSVファイルを読み込み、Excelシートに書き込み
with open(csv_file, 'r', encoding='shift_jis') as csv_data:
csv_reader = csv.reader(csv_data)
for row in csv_reader:
sheet.append(row)
# Excelファイルを保存
workbook.save(excel_file)
print(f'{csv_file} を {excel_file} に変換しました。')
APIの活用方法をChatGPTに聞いてみようかな🦖
この記事が気に入ったらサポートをしてみませんか?