我有一个大约有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
的列表中。任何帮助都会很棒。
答案 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)
)并将其添加到名为itemList
(itemList.append(. . .)
)的列表对象中。
如果你在“调用”它之前做了两件事,那么代码将执行列表对象的填充:
itemList
Item
类的定义。假设在名为Item
的文件中指定了item.py
,并且带有所有append语句的“csv”文件名为pseudo_csv.py,您应该可以这样做:
import item
itemList = []
execfile('pseudo_csv.py')