将逗号分隔值转换为Dict

时间:2015-03-18 07:36:27

标签: python csv dictionary

我有一些文字资料

>>> print content
Date,Open,High,Low,Close,Volume,Adj Close
2015-03-17,4355.83,4384.98,4349.69,4375.63,1724370000,4375.63
2015-03-16,4338.29,4371.46,4327.27,4370.47,1713480000,4370.47
2015-03-13,4328.09,4347.87,4289.30,4314.90,1851410000,4314.90
2015-03-12,4302.73,4339.20,4300.87,4336.23,1855110000,4336.23
2015-03-11,4336.05,4342.87,4304.28,4305.38,1846020000,4305.38

现在我想把它转换成Dict,这样我就可以使用cursor.executemany将它加载到数据库中,这允许我提供dict作为输入。

是否有自动将其转换为Dict的模块。我看了Numpy - loadtext但是这需要我先写一个文件。有没有办法可以在不创建文件的情况下做到这一点?

1 个答案:

答案 0 :(得分:5)

使用csv.DictReader

>>> with open('text.txt') as f:
...     dreader = csv.DictReader(f)
...     for row in dreader:
...         print(row)
... 
{'Adj Close': '4375.63', 'High': '4384.98', 'Volume': '1724370000', 'Low': '4349.69', 'Close': '4375.63', 'Open': '4355.83', 'Date': '2015-03-17'}
{'Adj Close': '4370.47', 'High': '4371.46', 'Volume': '1713480000', 'Low': '4327.27', 'Close': '4370.47', 'Open': '4338.29', 'Date': '2015-03-16'}
{'Adj Close': '4314.90', 'High': '4347.87', 'Volume': '1851410000', 'Low': '4289.30', 'Close': '4314.90', 'Open': '4328.09', 'Date': '2015-03-13'}
{'Adj Close': '4336.23', 'High': '4339.20', 'Volume': '1855110000', 'Low': '4300.87', 'Close': '4336.23', 'Open': '4302.73', 'Date': '2015-03-12'}
{'Adj Close': '4305.38', 'High': '4342.87', 'Volume': '1846020000', 'Low': '4304.28', 'Close': '4305.38', 'Open': '4336.05', 'Date': '2015-03-11'}
  

我查看了Numpy - loadtext,但这要求我先将它写入文件。有没有办法可以在不创建文件的情况下完成这项工作?

如果您不想拥有物理数据,可以使用类似对象的文件。

  • 使用tempfile.TemporaryFile

    from tempfile import TemporaryFile
    
    with TemporaryFile('w+t') as flike:
        flike.write(content)
        flike.seek(0)
        dreader = csv.DictReader(flike)
        for row in dreader:
            #do something
    
  • 使用io.StringIO

    import io #python3 or import StringIO in python2
    flike = io.StringIO(content)
    for row in csv.DictReader(flike)
        #do something