解決したいこと
Python初学者ですが、学習のために既存プログラムの改修を行いたいと考えております。
行いたい内容は、複数の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 2 3def main(): 4 # 商品マスターデータの読み込み処理 5 items = {} 6 with open('input/items.csv', encoding='utf-8') as f: 7 for row in f: 8 item_id, name, price = row.rstrip().split(',') 9 items[item_id] = { 10 'name': name, 11 'price': price 12 } 13 14 # 売上生データの読み込み処理 15 sales = [] 16 for filename in os.listdir('input/'): 17 if filename.startswith('sales_raw_') and filename.endswith('.csv') \ 18 and "201611" in filename: 19 with open(os.path.join('input/', filename), encoding='utf-8') as f: 20 for row in f: 21 data = row.rstrip().split(',') 22 item_id = data[2] 23 if item_id in items: 24 sales.append({ 25 'purchase_id': data[0], 26 'user_id': data[1], 27 'item_id': data[2], 28 'name': items[item_id]['name'], 29 'price': items[item_id]['price'], 30 'volume': data[3], 31 'datetime': data[4] 32 }) 33 34 # まとめた売上データを書き出し 35 with open('output/sales.csv', mode='w', encoding='utf-8') as f: 36 for row in sales: 37 f.write(f'{row}\n') 38 39if __name__ == "__main__": 40 main()
自分で試したこと
商品マスターデータの読み込み処理と、売上生データの読み込み処理は現状は、上記のコードで問題ございません。
csvモジュールを使用せず、まとめた売上データを書き出しの処理で意図通りの出力が出来れば良いのですが、そこが上手くいきません。(調べてはみたのですが、csvモジュールを使用したやり方しか見当たらなかったためです。)
現状のコードだと、辞書型として、「キー」と「バリュー」の両方が出力されてしまいます。
また、データの前後に{}が付いております。こちらの{}も必要ありません。
出力結果をバリューのみにするには、どのように記述すると良いでしょうか。
長くなってしまい、大変恐縮ではございますが、ご教授頂けますと幸いです。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2021/05/12 01:58