巨大的文本文件到小excel文件

时间:2013-08-14 12:26:59

标签: python csv export-to-excel text-mining xlrd

我有一个巨大的文本文件(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

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

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

我需要分析小的excel文件,主要找到[Text]单元格中提到的术语,并计算与[number]单元格相关的外观数量(代表帖子和ID)一篇文章)。

最后,我需要在excel文件中汇总所有这些数据。

我正在考虑创建和分析excel文件的最佳方法 如上所述[{3}},主要的库是herexlrd

2 个答案:

答案 0 :(得分:3)

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

您的大文本文件是一种数据库,虽然不方便。一堆小的Excel文件是同一个数据库的另一个甚至不太方便的表示。我假设你要制作一堆小文件,因为Excel有一个上限可以包含多少行(65'000或1'000'000,具体取决于Excel的版本)。但是,正如been noted一样,Excel文件是真正可怕的数据库存储。

由于您已经在使用Python,因此使用模块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做得好。

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

答案 1 :(得分:0)

只是逐行循环遍历文件有什么问题?如果你的心脏设置在excel上,我会推荐openpyxl