1

我有一个巨大的文本文件(4 GB),其中每个“行”的语法为: [number] [number]_[number] [Text].
例如

123 12_14 Text 1
1234 13_456 Text 2
33 12_12 Text 3
24 678_10 Text 4

我的目的是将这些数据保存为 Excel 文件,其中文本文件中的每一“行”都是 Excel 文件中
的一行。根据过去的例子:

[A1] 123
[B1] 12_14
[C1] Text 1
[A2] 1234
[B2] 13_456
[C2] Text 2
[A3] 33
[B3] 12_12
[C3] Text 3
[A4] 24
[B4] 678_10
[C4] Text 4

我的计划是按照此处的建议迭代文本“行”,将“行”分开,
然后保存到 excel 文件中的单元格中。

由于文本大小问题,我想创建许多小的 excel 文件,它们加起来就等于文本文件。

比我需要分析小的excel文件,主要是找到[Text]单元格中提到的术语,并计算与[number]单元格相关的出现次数(代表帖子和帖子的ID)。

最后,我需要将所有这些数据汇总到一个 Excel 文件中。

我正在考虑创建和分析 excel 文件的最佳方法。
如前所述主要库是xlrdcsv

4

2 回答 2

3

“我很确定除了小的 excel 文件之外我没有其他选择,但另一种方法是什么?”

您的巨大文本文件是一种数据库,虽然不方便。一堆小的 Excel 文件是同一数据库的另一种更不方便的表示。我假设您正在寻找制作一堆小文件,因为 Excel 对它可以包含的行数有上限(65'000 或 1'000'000,具体取决于 Excel 的版本)。然而,如前所述,Excel 文件是真正可怕的数据库存储。

由于您已经在使用 Python,请使用 module sqlite3,它已经内置并且是一个真正的数据库,它可以处理超过一百万行。而且速度很快。

但我想知道你建议的规模数据的速度有多快,所以我创建了一个 30M 行的数据库,其复杂性与你的数据集大致相同。架构很简单:

create table words
    (id integer primary key autoincrement not null,
     first text, second text, third text);

并用从 /usr/dict/words 中提取的随机三元组填充它(我有一个用于生成这样的测试数据的模块,它使条目看起来像

sqlite> select * from words limit 5;
1|salvation|prorates|bird
2|fore|embellishment|empathized
3|scalier|trinity|graze
4|exes|archways|interrelationships
5|voguish|collating|partying

但是对我知道接近尾声的一行的简单查询花费的时间比我希望的要长:

select * from words where first == "dole" and second == "licked";
29599672|dole|licked|hates

在一个相当平均的 3 年历史的桌面上花了大约 7 秒,所以我添加了几个索引

create index first on words (first);
create index second on words (second);

这确实使数据库文件的大小从 1.1GB 增加到 2.3GB,但将简单查询时间降低到相当合理的 0.006 秒。我不认为你会用 Excel 做得很好。

因此,您必须解析您的数据,然后将其放入真实的数据库中。

于 2013-08-15T00:47:26.800 回答
0

仅逐行遍历文件有什么问题?如果您对 excel 有心,我会推荐openpyxl

于 2013-08-14T12:50:19.227 回答