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