Python:将csv文件转换为字典

时间:2018-09-09 14:11:13

标签: python python-3.x csv dictionary

这是我的csv文件(import_inventory.csv)内容:

ruby ,  rope ,  ruby  , gold coin ,  ruby  , axe

纯文本。 CSV文件与我的脚本位于同一文件夹中。

我要打开它,然后将其添加到我的“ inv”字典中:

inv = {'rope': 1, 'torch': 6, 'gold coin': 42, 'dagger': 1}

我必须使用该函数作为默认函数并对其进行定义(这是我的练习):

def import_inventory(inventory, filename="import_inventory.csv"):

接下来,我需要像这样打印它:

Inventory:
 count    item name
   ----------------
    45    gold coin
    12        arrow
     6        torch
     2       dagger
     1         rope
     1         ruby
    ----------------
  Total number of items: 67

我有一个名为“ print_table”的函数,该函数对我来说就是这样。这只是为了让您知道,目前的问题仅在于打开csv文件并将其与现有字典“ inv”合并

先谢谢了。如果有不清楚的地方,请告诉我!

2 个答案:

答案 0 :(得分:0)

我认为这应该做您想要的。 如果字典中不存在某一项,则必须创建一个值为1的该项。在其他所有情况下,您只需添加一个即可。

   def import_inventory(inventory, filename="import_inventory.csv"):
        file = open(filename, 'r')
        data = file.readline().split(',')
        inv = inventory
        for item in data:
            item = item.strip()
            if item in inv:
                inv.update({item: inv[item]+1})
            else:
                inv.update({item: 1})
        return inv

    def print_table(inventory):
        inv = inventory
        count = 0
        print('{:>5} {:>15}'.format('count', 'item name'))
        print('---------------------')
        for item in inv:
            print('{:>5} {:>15}'.format(inv[item], item))
            count = count + inv[item]
        print('---------------------')
        print('Total number of items: ' + str(count))


    given_inventory = {'sword': 100, 'rope': 4}
    new_inventory = import_inventory(given_inventory)
    print_table(new_inventory)

答案 1 :(得分:0)

我将以更Python化的方式设计 import_inventory ,并使用上下文管理器与纯文本文件进行交互,并使用defaultdict来计算库存。

from collections import defaultdict
from contextlib import suppress

def import_inventory(inventory, filename):
    _inventory = defaultdict(int)
    with open(filename, encoding="UTF_8") as stream:
        for line in stream:
            for item in line.split(","):
                stock = inventory.get(item.strip(), 0)
                with suppress(KeyError):
                    del(inventory[item.strip()])
                _inventory[item.strip()] += stock + 1
    return _inventory

defaultdict 的好处是您不必在增加库存前检查您的商品是否存在。 Python defaultdict 为您做到了。

该函数运行三个步骤:

  1. 获取已读商品的当前库存。如果该商品没有库存,请将其初始化为0。
  2. 从当前库存中删除物料,以便仅获取一次当前库存。使用抑制功能监视KeyError异常。
  3. 将新库存增加到 _inventory 中(无需检查项目是否已存在)。