機械系エンジニアの備忘録

20代独身社会人。仕事では機械・機構の研究開発を行っているエンジニアが、自分の専門分野ではないpythonを扱って楽しむブログです。

MENU

【python】【初心者】tkinterを使ってcsvファイルを読み取る方法(3/3)

pythonTkinterCSVを読み取る方法 part3

■はじめに

前回、前々回でtkinterを用いてGUIから任意のCSVファイルを選びデータを読み取る方法を紹介しました。 

stjun.hatenablog.com

stjun.hatenablog.com

 今回、CSVから抜き出したデータをExcelデータとして出力する方法を紹介します。

これは前々回紹介した下記流れの③に当たります。

tkinterを使って任意のCSVファイルを指定←part2(前回)

②その指定したCSVファイルから欲しい情報を抜き出す←part1(前々回)

③抜き出した情報をExcelファイルとして出力←part3(今回)

 

■コード

import tkinter as tk
import tkinter.filedialog as fl
import numpy as np
import time
import openpyxl as px

root=tk.Tk()

#ファイルパスをマウスで選ぶ
#ユーザー名にお使いのPCの名前を入れてください
def get(*args):
    filetype=[("all file","*")]    
    path=fl.askopenfilename(initialdir="C:/Users/ユーザー名/Desktop",filetypes=filetype,title="select file")
    message["text"]=path
    
    #以下は前回と同じ、CSVファイルのデータを読み込み表示させる
    data_1, data_2,data_3= np.loadtxt(fname=path, skiprows=2, unpack=True)
    print(data_1)
    print(data_2)
    print(data_3)
    
    #今日の日付・時間を取得(ファイル名に入れるため)
    timestr=time.strftime("%Y%m%d-%H%M%S") #年月日時分秒の形式で取得

    #新しいExcelの作成とアクティブ化
    wb=px.Workbook()
    ws=wb.active

    #Excelシートの名前を設定
    ws.title="計算結果"

    #Excel一行目にどんな物理量について計算したか記載するためのリスト
    list_target=["物理量A(単位)","物理量B(単位)","物理量C(単位)"]

    #Excelの1行目に記載していく
    for i in range(len(list_target)):
        ws.cell(row=1,column=i+1,value=list_target[i])

    #計算結果をセルに代入する
    for i in range(len(data_1)):
        ws.cell(row=i+2,column=1,value=data_1[i])
        ws.cell(row=i+2,column=2,value=data_2[i])
        ws.cell(row=i+2,column=3,value=data_3[i])

    #Excelデータをデスクトップに保存する(ユーザー名にお使いのPCの名前を入れてください)
    wb.save(r"/Users/ユーザー名/Desktop/test"+timestr+".xlsx")

message=tk.Label(root,text="ファイルを選択してください",width=30)
message.grid(row=0,column=0)

button=tk.Button(text="開く",command=get)
button.grid(row=0,column=1)

root.mainloop()

コードを実行すると次画面がでてきます。

f:id:stjun:20190805004257p:plain

右側の開くボタンを押して開きたいCSVファイルを選択します。選択すると選択されたファイルのパスが表示されデータが読み込まれます。詳しくはpart2の記事を見て下さい。

f:id:stjun:20190805004423p:plain

f:id:stjun:20190805004752p:plain

またデスクトップにExcelファイルが出現します。そのExcelファイルを開くと下のようにデータが格納されているのが分かります。

f:id:stjun:20190805004242p:plain

 

これでCSVファイルを選択するだけで、自動でデータを抽出して新規Excelファイルを作成することができました。

■説明

今回新しい内容はなく、part1・part2と次の過去記事を組み合わせて作っています。

stjun.hatenablog.com

 具体的には、part1で紹介したようにCSVのデータは次のようにdata_1~date_3に格納されています。

data_1, data_2,data_3= np.loadtxt(fname=path, skiprows=2, unpack=True)

 

そこでdata_1~date_3を次のコードでExcelにfor文を使って代入していきます。

for i in range(len(data_1)):

ws.cell(row=i+2,column=1,value=data_1[i]) ws.cell(row=i+2,column=2,value=data_2[i]) ws.cell(row=i+2,column=3,value=data_3[i])

今回、1行目はタイトルを入れており2行目からデータを入力していきたいのでrow=i+2としています。

 

■本紹介

pythonを初めて触ろうとした時に読んだ本を紹介します。

 

 この本は、初心者に最適だと思います。確か亀を動かすゲームのようなコードが載っていたと思います。pythonをこれから始めようと思っている人は読んでみて下さい。

また下の入門python3も良い本だと思いますが、分厚いので中々根気が必要です。個人的には最小限必要なことが書いてある薄い本を読み、必要になってからちょっとずつ知識を増やしていくのが良いと思います。

また何度も紹介しますが、以下のニューラルネットワーク自作入門は非常に良い本です、pythonの書き方から記載されているのでいきなり読んでも大丈夫だと思います。

 とりあえず基本的なコードの書き方さえ分かってしまえば、後はネットで知りたい情報にアクセスする方が早いと思います。

 

■最後に

これでCSV選択からExcelファイルの出力までができました。基本はこれで良いと思います。ただし使いやすさを考えるなら「複数のCSVファイルを一度に処理したい」、「エクセルでグラフ化自動化したい」などまだまだやれることはありそうです。今後紹介していきます。