-1

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

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)

我正在尝试将这些数据提取到一个名为itemListusing的列表中jython。任何帮助都会很棒。

4

3 回答 3

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>]
于 2012-09-19T18:08:55.370 回答
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 文件。您可以使用csv模块导入数据,然后根据您读入的数据创建对象。通常最好不要尝试存储某些用户定义类的对象;相反,存储用于创建该对象的数据,然后在读取数据时重新创建该对象。您还可以查看用于将 Python 对象读取和写入文件pickle模块。

于 2012-09-19T18:25:00.773 回答
-1

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

编码

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

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

该代码将执行列表对象的填充,前提是您在“调用”它之前做两件事:

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

假设Item在名为 的文件中指定item.py,并且包含所有附加语句的“csv”文件称为 pseudo_csv.py,您应该能够执行此操作:

 import item
 itemList = []
 execfile('pseudo_csv.py')
于 2012-09-19T18:18:51.793 回答