我获得了包含需要加载到 postgres 数据库中的数据的文本文件。
这些文件以记录(每行一个)的形式结构化,字段由波浪号 (~) 分隔。不幸的是,有时字段内容会包含一个波浪号。
由于文件不是整齐的 CSV,并且波浪号没有转义,这会导致记录包含太多字段,从而导致数据库抛出异常并停止加载。
我知道记录应该是什么样子(文本、整数、浮点字段)。
有没有人有关于如何修复超长记录的建议?我用 per 编码,但我对 python、javascript、纯英语的建议感到满意。
我获得了包含需要加载到 postgres 数据库中的数据的文本文件。
这些文件以记录(每行一个)的形式结构化,字段由波浪号 (~) 分隔。不幸的是,有时字段内容会包含一个波浪号。
由于文件不是整齐的 CSV,并且波浪号没有转义,这会导致记录包含太多字段,从而导致数据库抛出异常并停止加载。
我知道记录应该是什么样子(文本、整数、浮点字段)。
有没有人有关于如何修复超长记录的建议?我用 per 编码,但我对 python、javascript、纯英语的建议感到满意。
您可以尝试使用以下内容过滤掉损坏的行:
perl -F'~' -lane 'print if @F > 10' input.txt > broken_fields.txt
(假设您的最大字段数为 10)。它会给你一个简短的(er)文件,其中包含你可以手动检查的可疑行。这不是一个万无一失的过滤器,它会例如打印出允许的字段,例如带引号的字符串中的波浪线。如果你想要更精确的东西,你可以使用Text::CSV
,但是当涉及到损坏的 csv 数据时,这会带来其他困难。
可能有更好的(和自动的)方法来解决这个问题,但是在不知道你的输入是什么样子的情况下,没有办法真正推荐一些东西。
如果您知道每个字段应该是什么,也许您可以编写一个仅匹配该字段类型的正则表达式(忽略波浪号)并捕获匹配项,然后替换文件中的原始字符串?