行いたい内容は、複数のcsvファイルを読み込み、データを整理した後、一つのファイルに書き出しです。
解決したいこと
まずは、下記に記載しているプログラムの「# CSVファイルを読み込んで辞書のリストで返す関数を実装する」という箇所を関数や定数を用いて実装したいと思っております。
csvモジュールなどモジュールの追加は基本的には行わず実装したいと思っております。
ファイルは下記になります。
商品のマスターデータ →/input/items.csv 商品の売上データ(日毎に別ファイル) →/input/sales_raw_20161030.csv /input/sales_raw_20161101.csv ... /input/sales_raw_20161106.csv 書き出し後の売上データ →/output/sales.csv
商品マスターデータ(items.csv)の中身は下記になります。
商品ID、商品名、商品価格
商品の売上データ(sales_raw_YYYYmmdd.csv)の中身は下記になります。
購入ID、ユーザーID、商品ID、個数、販売日時
書き出し後のデータ(sales.csv)は下記になります。
購入ID、ユーザーID、商品ID、商品名、商品価格、個数、販売日時
*商品の売上データの商品IDと商品マスターデータの商品IDを紐付け、紐付く商品名と商品価格を出力させます。
現状のプログラム
py
1import os 2import re 3 4ITEMS_DATA = 'input/items.csv' 5ITEMS_COLUMNS = ['item_id', 'item_name', 'item_price'] 6 7SALES_RAW_REGEX = re.compile(r'^sales_raw_(\d{4})(\d{2})(\d{2}).csv$') 8SALES_COLUMNS = ['purchase_id', 'user_id', 'item_id', 9 'item_name', 'item_price', 'amount', 'sold_at'] 10SALES_DATA = 'output/sales.csv' 11 12ENCODING = 'utf-8' 13CSV_INPUT = input('') 14 15# CSVファイルを読み込んで辞書のリストで返す関数を実装する 16def read_csv(f, columns): 17 pass 18 19def main(): 20 # 商品のマスターデータ読み込み 21 items = {} 22 with open(ITEMS_DATA, encoding=ENCODING) as f: 23 for row in read_csv(f, items): 24 # CSVファイルを読み込んで辞書のリストで返す関数使う 25 item_id, item_name, item_price = row.rstrip().split(',') 26 items[item_id] = { 27 'item_name': item_name, 28 'item_price': item_price 29 } 30 31if __name__ == "__main__": 32 main()
*コードを抜粋しております。
自分で試したこと
商品マスターデータのwith文をread_csv関数内に記述していたのですが、その場合、関数の使い回しが出来ないので、
「商品マスターデータ読み込み」内に記述したり、read_csvの引数に問題が生じたりしていたので、修正を行ったりしましたが、
結局解決できないまま時間だけが過ぎてしまうので、ご教授頂けますと幸いです。
read_csv関数に関しては、csvモジュールを使用したやり方はたくさんサイトに載っているのですが、今回はcsvモジュールを使わないで実装なので、参考になるサイトも見当たらず、何を記述すると良いのかも分からない状況です。
read_csvで返したい情報としては下記のようなものになります。
[{'item_id': '1', 'name': '掃除機', 'price': '4980'}, {'item_id': '2', 'name': '扇風機', 'price': '2980'}......]
その他に何か必要な情報などありましたら、提示いたします。
大変恐縮ではございますが、ご教授頂けますと幸いです。
よろしくお願いいたします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。