見出し画像

『退屈なことは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に聞いてみようかな🦖


この記事が気に入ったらサポートをしてみませんか?