Pythonでcsvデータを新規作成したExcelに読み込み処理を自動化したいと考えております。
数値データが文字列として読み込まれてしまい、解決方法を探しています。
対象の範囲だけ数値で読み込む、もしくは数値に変換する方法をご教示いただけませんでしょうか。
読み込むCSVデータ構成
cost.csv
ID,012,035,123 アカウント名,あああああ,かかかかか,ははははは 2021/1/1,45678,12345,98765 2021/2/1,34567,11234,98652
- カンマ区切りの複数行データです。
- 各行の先頭に見出しがあります。
- 1行目はIDで先頭に0がつく場合があります(文字列で読み込みたい)
- 3・4行目の日付以外は数値で読み込みを行いたい(Excel読み込み後に計算したい)
記載したpythonのコード
python
#ライブラリを取り込む import openpyxl as excel import csv from datetime import datetime #新規ワークブックを作る book = excel.Workbook() #sheetの作成 sheet = book.active #CSV読み込みファイル名指定 csv_filename="cost.csv" #CSVファイルを開く with open(csv_filename, encoding="utf-8",newline="") as csvf: #CSVファイルからデータを読み込む data=csv.reader(csvf) r=1 for line in data: c=1 for v in line: sheet.cell(row=c,column=r).value=v c += 1 r += 1 #年月を取得 now = datetime.now() #ファイルを保存 book.save('前月比較{}.xlsx'.format(now.strftime('%Y%m'))) #ファイルを閉じる book.close()
上記を実行すると、行列を入れ替えた状態でExcelに正常に読み込まれるのですが、1点課題があります。
各月の数値の値がテキスト形式(文字列)として読み込まれてしまっています。
試みたこと
そのため以下の処理を試みてみましたが、うまくいきません。
- 値をfloat形式で読み込む
- 書式設定を数値に指定する
以下が変更したコードになります。
python
(省略) #CSVファイルを開く with open(csv_filename, encoding="utf-8",newline="") as csvf: #CSVファイルからデータを読み込む data=csv.reader(csvf) r=1 for line in data: c=1 for v in line: if r>=2 and c>=3: sheet.cell(row=c,column=r).number_format='#,##0' sheet.cell(row=c,column=r).value=float(v) else: sheet.cell(row=c,column=r).value=v c += 1 r += 1 (省略)
補足
CSVから読み込んだデータをpython上でprint確認したところ、以下のように文字列として処理されていました
python
[`ID`,`012`,`035`,`123`] [`アカウント名`,`あああああ`,`かかかかか`,`ははははは`] [`2021/1/1`,`45678`,`12345`,`98765`] [`2021/2/1`,`34567`,`11234`,`98652`]
今日1日色々調べて様々な方法で記述変更して試しているのですが、解決方法がわからずご質問いたしました。
*Python初学者で色々調べながらここまで来ましたが、基礎的な理解が足りていないと思います。
ただ、まず一つ形にしてみたく…助言いただけますと幸いです。
よろしくお願いいたします。
まだ回答がついていません
会員登録して回答してみよう