

おせわになります。  
open w で下記の様に、csvを作りました

[code]

    import csv
    
    data = {'hito' : 61,'hiro' : 54,'yuto'  :  17,'osamu': 67,'keiko':71}
    
    with open('name.csv', 'w', newline='') as csv_file:
        fieldnamse = ['Name', 'Date']
        writer = csv.DictWriter(csv_file,fieldnames=fieldnamse)
        writer.writeheader()
        for name, key in data.items():
            writer.writerow({
            'Name': name,
            'Date': key
            })
    
[/code]

結果は下記の通りです。

[code]

    Name,Date
    hito,61
    hiro,54
    yuto,17
    osamu,67
    keiko,71
    
[/code]

今度、csvに保存したデータを、PCのメモリに格納したいのです。仮想メモリでも良いです。  
下記の様にしました。

[code]

    import csv
    with open('name.csv', 'r') as csv_file:
        reader = csv.DictReader(csv_file)
        print('Name','Date')
        d ={}
        for row in reader:
            print(row['Name'], row['Date'])
    
[/code]

これでは、ただ、print文で、表示されるだけですし、row['Name'], row['Date']を  
一回だけメモリに格納するだけで、Loop中に書き換わってしまいます。

[code]

    with open('name.csv', 'r') as csv_file:
        reader = csv.DictReader(csv_file)
        print('Name','Date')
        d ={}
        for row in reader:
            A =row['Name']
            B =row['Date']
        return read_data`
    
[/code]

A, Bのそれぞれに格納されるデータは、書き換わってしまいます。  
配列の様なものを、本やWEBで検索していますが、見つかりません。  
他のサイトで質問しても、高度な内容の回答しか届いていません。

[code]

    　　read_data.append(row['Name']....)
    
[/code]

の様な感じですが、appendは使用できません。  
最後にreturnで、read_dataに格納されるイメージの方法を考えています。  
あくまで、辞書形式で、pandasは使用しない方法を考えています。

結果として、上記のcsvのデータが、辞書データ、dataが入る事になりますが、メモリにデータを要求仕様通り、処理してから、open w
あるいは、r+で変更する事が最終目標です、

classを使えば何とかやれそうなんですが、大掛かりになりそうなので、手が止まっています。  
以上、よろしくお願いします。  


CC BY-SA 4.0
2018-11-11T01:58:15.773
50191
2018-11-11T12:30:11.717
30926
question
python csv
pythonでcsvのデータを辞書型でPCにin memoryで格納したい


辞書型の場合は、次のようにキーと値を指定すると追加・更新ができます。

[code]

    with open('test.csv', 'r') as csv_file:
        reader = csv.DictReader(csv_file)
        d ={}
        for row in reader:
            d[row['Name']] = row['Date']
    
[/code]

なお、辞書型の場合は、csvを使うよりもjsonを使うほうが相性がよく、次で書き込みが、

[code]

    import json
    
    data = {'hito': 61, 'hiro': 54, 'yuto': 17, 'osamu': 67, 'keiko': 71}
    with open('name.json', 'w') as f:
        json.dump(data, f)
    
[/code]

次で、読み込みができます。

[code]

    import json
    
    with open('name.json', 'r') as f:
        data = json.load(f)
    
[/code]


CC BY-SA 4.0
2018-11-11T02:58:21.400
50193
2018-11-11T03:13:41.530
2018-11-11T03:13:41.530
15171
15171
50191
answer


ご回答ありがとうございます。

[code]

    with open('test.csv', 'r') as csv_file:
        reader = csv.DictReader(csv_file)
        d ={}
        for row in reader:
            d[row['Name']] = row['Date']with open('test.csv', 'r') as csv_file:
    
[/code]

で、最後に、`  
return d  
で、一時的に、メモリに記憶する事が出来ました。  
こんなに、簡単だとは、思いもよらなかったです。先程、classで、コードを書いて、一応成功しましたが、こちらの方が、遥かに良いです。

さて、jsonの件ですが、よく、APIのデータで、見かけます。pythonと相性が良いとは驚きです。  
ただ、Win10にインストールしている、python3.6.xでは、dump()なるものが出てきません。  
標準なのに不思議です。

どうも、ありがとうございました。`


CC BY-SA 4.0
2018-11-11T12:03:52.690
50211
2018-11-11T12:03:52.690
30926
50191
answer


pythonのライブラリの一つであるpandasを使用してよいのであれば、一行で書けます。

[code]

    import pandas as pd #ここでエラーが出るならインストールが必要
    pd.read_csv("name.csv").set_index("Name").to_dict()["Date"]
    
[/code]

pandasではDataFrameというcsv的なデータをインメモリ的に処理できるクラスをサポートしており、pythonの基本的な辞書との相互変換もサポートしているので、このような風に簡単にできます。


CC BY-SA 4.0
2018-11-11T12:30:11.717
50212
2018-11-11T12:30:11.717
25980
50191
answer