gpt4 book ai didi

java - 设计中间数据文件的格式?

转载 作者:行者123 更新时间:2023-11-30 04:33:56 31 4
gpt4 key购买 nike

我们正在将大量数据(就数量而言而不是频率而言,即一次转储 100K 或 > 400MB 记录)从数据库转储到 Excel 文件。目前转储过程正在 Python、R 和 Java 中执行(使用 POI 库)。作为转储过程的一部分,我们将数据从数据库读取到中间文件(管道分隔的文本文件),然后由代码选取该中间文件来更新 Excel 文件。最近,我们遇到了以下问题:数据库中带有换行符的文本导致管道分隔的文件无效,因为 1 条记录跨越多行而不是仅一行。例如,

| Col1 | Col2 | Col3 |  
| Val | Val2 | Val3 |

是管道分隔文件的有效示例。如果数据包含任何新行,则:

| Col1 | Col2 | Col3 |
| Val1


| Val2 | Val3


|

此类场景变得更难捕获,并且需要编写更多代码才能进行此类检查。

我想知道是否有任何库/技术可用于写出此类临时数据。我不确定 XML 是否会成为一种解决方案,因为对于如此大量的数据来说,性能可能会成为一个问题。 JSON 似乎更适合,但我不知道这里的所有选项。

最佳答案

如果列数始终保证相同,这只是 csv 的一种奇怪的方言,您应该能够使用 Python 中的 csv 模块来解析它,我怀疑是 Java (但可能不是 R)在内置或现成的库中具有类似的功能。

或者,如果您出于某种原因自己编写了解析器,那么扩展它们来处理换行符应该很容易。例如,不要读取一行并在 | 上拆分并假设您已获得所有字段,而是读取一行,在 | 上拆分,然后数一下是否有足够的字段,如果没有,请阅读下一行并追加并重试。但使用已经编写和测试过的代码确实比尝试自己将其组合在一起要好。

(当然,如果字段可以包含 | 字符,那么这种格式是不明确的,并且无法被任何内容解析,除非您以某种方式转义它们。)

另一种选择是仅在一端引用或转义换行符(和其他特殊字符),并在另一端取消转义它们。再说一遍,这是任何像样的 csv 库都会为您做的事情(几乎无论您是否愿意)。

您可能需要考虑使用准标准 csv 方言(通常意味着“由 Excel 默认值定义”),而不是提出类似但不相同的自定义格式。

使用标准 csv 方言的一个明显优势是 Excel 可以直接读取结果,这可能会从长链中删除一层。 (当然,您可以通过使用 Excel 的数据访问功能来导入或前置实际数据库,从而取出更多层。)

如果您想更改为 JSON,没有理由不能。但这里似乎没有任何令人信服的理由这样做。当您拥有灵活的动态记录类型时,JSON(或类似的东西,如 YAML)绝对是最佳选择。但是,当您一遍又一遍地重复静态记录类型时,JSON 意味着一遍又一遍地重复这些字段的名称。它不像 XML 那样糟糕,但它仍然是需要创建、传递和解析的额外信息,没有任何实际好处。

所以,我认为正确的答案是:如果可能的话,使用 Excel 样式的 csv,您自己独特的 csv 方言,并添加一条规则,用于在由于某种原因不可能时如何处理换行符。

关于java - 设计中间数据文件的格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13961531/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com