简单的问题,但也许是棘手的答案:
问题是如何使用pytables处理一个巨大的.txt文件。
我有一个很大的.txt文件,有数百万行,短行,例如:
line 1 23458739
line 2 47395736
...........
...........
这个.txt的内容必须保存到pytable中,好吧,这很容易。与txt文件中的信息无关,只需复制到pytables中,现在我们有一个pytable,例如10列和数百万行。
当使用txt文件中的内容,在paytable BUT中直接生成10列x百万行时,问题出现了,具体取决于.txt文件每行的数据,必须在pytable。那么如何有效地处理这个?
解决方案1:首先将所有文本文件逐行复制到pytable(数百万),然后迭代pytable上的每一行(再次数百万),并根据值生成pytable所需的新列。
解决方案2:逐行读取.txt文件,执行任何操作,计算新需要的值,然后将所有信息发送到pyrtable。
解决方案3:.....任何其他有效且更快的解决方案???
答案 0 :(得分:1)
我认为这里的基本问题是概念模型之一。 PyTables的表只处理常规(或结构化)数据。但是,您拥有的数据是不规则的或非结构化的,因为在读取数据时确定结构。换句话说,PyTables需要在调用create_table()
时完全知道列描述。没有办法解决这个问题。
因为在你的问题陈述中,任何一行都可能添加一个新列,你别无选择,只能通过两次完整的数据传递:(1)读取数据并确定列和(2)将数据写入桌子。在伪代码中:
import tables as tb
cols = {}
# discover columns
d = open('data.txt')
for line in d:
for col in line:
if col not in cols:
cols['colname'] = col
# write table
d.seek(0)
f = tb.open_file(...)
t = f.create_table(..., description=cols)
for line in d:
row = line_to_row(line)
t.append(row)
d.close()
f.close()
显然,如果你提前知道表结构,你可以跳过第一个循环,这会更快。