我想在标签分隔值文件中读取并将其转换为numpy数组。该文件有3行。它看起来像这样:
Ann1 Bill1 Chris1 Dick1
Ann2 Bill2 Chris2 "Dick2
Ann3 Bill3 Chris3 Dick3
所以,我使用了这个简单的代码行:
new_list = []
with open('/home/me/my_tsv.tsv') as tsv:
for line in csv.reader(tsv, delimiter="\t"):
new_list.append(line)
new = np.array(job_posts)
print new.shape
由于那个讨厌的"
字符,我花哨的新numpy数组的形状是
(2,4)
那不对!因此,解决方案是在csv.reader调用中包含参数quoting
,如下所示:
for line in csv.reader(tsv, delimiter="\t", quoting=csv.QUOTE_NONE):
太好了!现在我的维度是
(3,4)
我希望如此。
现在出现了真正的问题 - 实际上,我有一个700,000 X 10 .tsv文件,有长字段。我可以毫无问题地将文件读入Python,就像上面的情况一样。但是,当我到达创建new = np.array(job_posts)
的步骤时,我的笨拙的16 GB笔记本电脑哭了,说...
MEMORY ERROR
显然,我不能在内存中同时拥有这两个对象 - 列表的Python列表和numpy数组。
因此我的问题是:我如何将这个文件直接读入一个numpy数组,可能使用genfromtxt
或类似的东西......但也实现了我使用{{1}所取得的成就csv.reader中的参数?
到目前为止,我发现在使用numpy读取tsv文件的标准方法中,quoting=csv.QUOTE_NONE
选项中没有任何类比。
这是一个棘手的小问题。我虽然在阅读过程中迭代地构建了numpy数组,但我无法弄明白。
我试过
quoting=csv.QUOTE_NONE
得到了
nparray = np.genfromtxt("/home/me/my_tsv.tsv", delimiter="/t")
print obj.shap
如果有人有任何建议,我会非常感激。此外,我知道真正的答案可能是使用Pandas ......但是在这一点上,我承诺使用numpy有很多令人信服的理由...
提前致谢。