【问题标题】:Huge text file to small excel files大型文本文件到小型 excel 文件
【发布时间】:2013-08-16 09:44:11
【问题描述】:

我有一个巨大的文本文件(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 文件的最佳方法。
正如here 提到的,主要的库是xlrdcsv

【问题讨论】:

  • 如果您的唯一目标是分析原始文本文件(比如数数......),那么这不是最简单的方法。如果您有其他原因导致一堆 excel 文件结束,请继续。
  • 你不需要将整个文本文件加载到内存中,你可以read the text line by line。将文本拆分为excel是完全没有必要的。
  • @Brionius 我很确定除了小的 excel 文件之外我没有其他选择,但是另一种方法是什么?
  • @simpleBob 建议的代码 (stackoverflow.com/questions/18178089/…) 不会将整个文本加载到内存中
  • @pnuts 这是初学者的错误,抱歉。

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


【解决方案1】:

“我很确定除了小的 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 做得那么好。

所以你必须解析你的数据,然后把它放到一个真实的数据库中。

【讨论】:

    【解决方案2】:

    只逐行循环文件有什么问题?如果您对 excel 感兴趣,我会推荐 openpyxl

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多