【问题标题】:Python - splitting up many small txt files into a data structure to feed into mysqlPython - 将许多小 txt 文件拆分为数据结构以输入 mysql
【发布时间】:2023-03-08 12:56:02
【问题描述】:

我有几十万个非常标准形状的 txt 文件(它们都有共同的元素 - ID、日期、收件人、发件人、主题、正文。

这些不是结构化格式,例如多部分电子邮件。

我想将它们剥离成它们的组成部分,并将整个部分输入数据库。它们有很多,所以我想确保这种方法有效。

我正在思考许多关键问题(我不是程序员——这是学习/爱好的东西)。

1) 是否有我可以强制转换的结构数据类型以合理的方式将这些位保持在一起。我认为有一个 file.ID、file.Date 等以结构化方式保存整个文件的 tryp 交易是合乎逻辑的,因此以后可以将其引入数据库。这是蟒蛇吗?还是我修补 Matlab 后的宿醉?

2) 正文部分可以是几 kb 大或一个句子。 (1)作为一个 blob 是否更好 - 我会放弃搜索 - 这样做的意义..和(2)如何确保我可以在我的 MYSQL 数据库中构建一个足够大的字段来获取时间?我不知道每个元素的最长大小是多少,除非我在消息拆分器中运行某种计数器来处理每条消息看到的最大值

3) 我想我会从步行开始,从步行中获取文件列表,然后逐行提取每个文件。我将使用行位置来推断一些已知位置(ID、日期),然后使用一些 RegEx 或基于特征的模式来拆分其余部分。拆分文件后,我计划摄取它们。但是,我想知道在每条消息的末尾连接到数据库并将这些部分一个一个转储到自己的记录中是否更合乎逻辑。

时间没有戏剧性,它可以持续一个星期来处理所有重要的事情。我在 i7 上大约有 8gb 的 RAM,所以我又不是特别渴望资源,很高兴让它通过它。

这听起来合乎逻辑吗?我错过了核心步骤吗?

谢谢。

【问题讨论】:

  • 使用 unix cat 之类的实用程序合并文件是一个想法吗?您可以合并所有格式完全相同的文件,根据您的数据格式,也许使用 MySQL 的 LOAD DATA INFILE 将它们高速读入数据库。
  • 也许...我必须四处挖掘以弄清楚这意味着什么 - 我在这里说的是几百 GB 的文本,而目前对象中没有结构。我最初写了一些东西来将它们拆分成单个事件文件,希望能够更容易地处理它们。要使用 LOAD DATA 无论如何我都需要处理它们,因为 MYSQL 将无法处理分段。

标签: python mysql text structure split


【解决方案1】:

广告 1)

我认为存储这些结构化数据的最“pythonic”方式是使用dict。另一种解决方案是声明class,但由于您不打算进行进一步处理(即您的数据类型不需要任何方法),您应该坚持使用最简单的解决方案(imo)。

随便用

data = {}
# Parse file
data['id'] = id_value;
data['date'] = date_value;
# ... and so on

将每个文件中的数据存储在data中。

广告 2)

在 python 端,您可以只使用字符串(即strunicode,如果您使用的是

在 MySQL 端,我会使用 TEXT 作为正文部分的数据类型。你也可以使用VARCHAR,但你需要给出一个最大长度。

广告 3)

我建议独立处理每个文件,即解析它并在之后立即将其写入数据库。海事组织没有理由不这样做。没有必要用所有数据填充内存(或者在读取最后一个文件之前有崩溃的风险,而没有任何内容被写入数据库)。我可能会使用某种机制来标记已处理的文件(将它们移动到另一棵树,重命名它们):如果我出于某种原因需要重新启动程序,这将阻止对同一文件进行两次处理。

【讨论】:

  • 好东西,谢谢。我刚刚花了最后 2 个小时悲惨地失败来暗示 MySQLdb 库 - 各种冲突的缺失部分 - 指出我没有 64 位版本的 setuptools(我认为)来整理库的安装。任何指针(包括擦除所有内容并重新开始......)
猜你喜欢
  • 2021-05-26
  • 2017-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-22
相关资源
最近更新 更多