将csv中的类项导入列表

时间:2012-09-19 17:59:30

标签: python list class csv

我有一个大约有4000行的csv文件,如下所示:

itemList.append(Item( 'SSCATALOG',  1,  "M" ,18 ,2))

itemList.append(Item( 'PTPC36200',  1,  "Z" ,19 ,8))

和一个看起来像这样的类:

class Item:
  def __init__(self, pid, aisle, bay, hits, qtyPerOrder):
    self.pid = pid
    self.aisle = int(aisle)
    self.bay = bay
    self.hits = int(hits)
    self.qtyPerOrder = int(qtyPerOrder)

我正在尝试使用itemList将此数据提取到名为jython的列表中。任何帮助都会很棒。

3 个答案:

答案 0 :(得分:0)

您的数据看起来不像逗号分隔值(CSV)。相反,它看起来像部分Python代码。 如果您的数据文件字面上如下所示:

  

itemList.append(Item('SSCATALOG',1,“M”,18,2))

     

itemList.append(Item('PTPC36200',1,“Z”,19,8))

然后您可以使用exec将其加载到您的脚本中:

class Item:
  def __init__(self, pid, aisle, bay, hits, qtyPerOrder):
    self.pid = pid
    self.aisle = int(aisle)
    self.bay = bay
    self.hits = int(hits)
    self.qtyPerOrder = int(qtyPerOrder)

with open('data', 'r') as f:
    itemList = []
    exec f
    print(itemList)

产量

[<__main__.Item instance at 0xb770cb4c>, <__main__.Item instance at 0xb770cb6c>]

答案 1 :(得分:0)

您的数据不是CSV。它是某种不完整的Python代码。根据你的说法,最简单的方法是在数据文件的开头添加一些代码,如下所示:

# add this
from someModule import Item
itemList = []

# leave the rest of your data below
itemList.append(Item( 'SSCATALOG',  1,  "M" ,18 ,2))
itemList.append(Item( 'PTPC36200',  1,  "Z" ,19 ,8))
# etc.

这里someModule是定义Item类的Python模块。如果进行这些更改,则可以将数据文件作为普通Python模块导入,并访问其itemList变量以获取数据。

但是,更好的长期解决方案是使用更好的数据格式。不要存储这样的数据:

itemList.append(Item( 'SSCATALOG',  1,  "M" ,18 ,2))

像这样存储:

'SSCATALOG',1,"M" ,18,2

然后它将是一个真正的CSV文件。您可以使用the csv module导入数据,然后然后根据您读入的数据创建对象。通常最好不要尝试存储某些用户定义的对象类;相反,存储用于创建该对象的数据,然后在读入数据时重新创建对象。您还可以查看the pickle module来读取和编写Python对象到文件。

答案 2 :(得分:-1)

此问题似乎没有涉及任何实际的CSV文件。

代码

 itemList.append(Item( 'SSCATALOG',  1,  "M" ,18 ,2))

不包含逗号分隔值,尽管它同时包含值和逗号,并且逗号位于值之间。相反,每一行都创建一个Item对象(Item( 'SSCATALOG', 1, "M" ,18 ,2))并将其添加到名为itemListitemList.append(. . .))的列表对象中。

如果你在“调用”它之前做了两件事,那么代码将执行列表对象的填充:

  • 您必须先创建名为itemList
  • 的列表对象
  • 您必须确保您的代码可以访问Item类的定义。

假设在名为Item的文件中指定了item.py,并且带有所有append语句的“csv”文件名为pseudo_csv.py,您应该可以这样做:

 import item
 itemList = []
 execfile('pseudo_csv.py')