0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【基礎から】PythonでExcel扱えるようにする(5)テキストデータの読み込み~エクセルに書き込み

Last updated at Posted at 2024-08-10

目的

テキストファイルから定型部分の取り込みからエクセルファイルへの書き込みをできるようにする。

step6:テキストファイルの読み込み~エクセルに張り付け

import openpyxl

def step06():
    print("step06")

    wb = openpyxl.Workbook()
    ws = wb["Sheet"]

    # テキストファイルオープン(UTF-8形式)
    with open('./lifedata_man_2023.txt', encoding='utf-8') as f:

        # 1行読み込み(先頭行)
        line = f.readline()
        # コピーする行番号を1にする
        num_line = 1
        # データがあるだけ繰り返す
        while line:
            # 1行のデータを表示(改行部分を除く)
            line_1 = line.rstrip("\n")
            # 半角スペースで分割
            line_2 = line_1.split(" ")
            print(line_2)
            # エクセル上にコピー
            num_col = 1
            for col_data in line_2:
                ws.cell(num_line,num_col).value = col_data
                num_col += 1

            # 次の行を読み込み
            line = f.readline() 
            # コピーする行番号を1追加
            num_line += 1
    
    # エクセルファイルの保存
    wb.save('input_file_step06.xlsx')
    wb.close()
    
# 動作部 
step06()

動作結果('input_file_step06.xlsx')

image.png

step7:テキストデータの取り込み~エクセルに張り付け(データ部の属性を指定)

import openpyxl

def step07():
    print("step07")

    wb = openpyxl.Workbook()
    ws = wb["Sheet"]

    # テキストファイルオープン(UTF-8形式)
    with open('./lifedata_man_2023.txt', encoding='utf-8') as f:

        # 1行読み込み(先頭行)
        line = f.readline()
        # コピーする行番号を1にする
        num_line = 1
        # データがあるだけ繰り返す
        while line:
            # 1行のデータを表示(改行部分を除く)
            line_1 = line.rstrip("\n")
            # 半角スペースで分割
            line_2 = line_1.split(" ")
            print(line_2)

            # エクセル上にコピー
            # ヘッダ部(2行目まで)
            if(num_line <= 2):
                num_col = 1
                for col_data in line_2:
                    ws.cell(num_line,num_col).value = col_data
                    num_col += 1
            # 2行目以降は整形する
            else:
                age = int(line_2[0])
                rate = float(line_2[1])
                lx = int(line_2[2])
                ndx = int(line_2[3])
                nLx = int(line_2[4])
                Tx = int(line_2[5])
                ex = float(line_2[6])
                # セルへコピー
                ws.cell(num_line,1).value = age
                ws.cell(num_line,2).value = rate
                ws.cell(num_line,2).number_format = '0.00000' #
                ws.cell(num_line,3).value = lx
                ws.cell(num_line,4).value = ndx
                ws.cell(num_line,5).value = nLx
                ws.cell(num_line,6).value = Tx
                ws.cell(num_line,7).value = ex
                ws.cell(num_line,7).number_format = '0.00'

            # 次の行を読み込み
            line = f.readline() 
            # コピーする行番号を1追加
            num_line += 1

    # オートフィルタ範囲の設定
    ws.auto_filter.ref = 'A2:G2'
    # ウィンドウ枠の固定(2行目まで)
    ws.freeze_panes = 'A3'
    
    # エクセルファイルの保存
    wb.save('input_file_step07.xlsx')
    wb.close()

# 動作部 
step07()

動作結果('input_file_step07.xlsx')

image.png

サンプルソースコード&データ(github)

本編へ戻る

履歴

2024/08/10 新規作成

リンク

[1] 生命表 2023年 男
https://www.mhlw.go.jp/toukei/saikin/hw/life/life23/dl/life23-06.pdf

eof

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?