【问题标题】:Parsing text fields into excel columns将文本字段解析为 excel 列
【发布时间】:2016-09-16 19:34:54
【问题描述】:

我尝试解析超过 20,000 条记录的数据。每条记录有 4 个字段,前缀为 2 个字母数字值。下面是一个有 2 条记录的示例。我目前有一个基于此处链接的使用 Java 的臃肿解决方案:Parsing HTML Data using Java (DOM parse)。但我不打算使用该解决方案,因为它仅用于分离记录是过度的。有没有使用 VBS、Python 或任何其他语言的解决方案,可以根据我已经使用的逻辑分离出字段?还是另一种合乎逻辑的方法?

     100000000          SMP008483
  |---   Category                Western
  |---   Model                   Ford
  |---   Asset Delivered Date    ?
  |---   Scheduled               ?

     100000001          SMP008484
  |---   Category                Eastern
  |---   Model                   Chevrolet
  |---   Asset Delivered Date    ?
  |---   Scheduled               ?

预期输出在这里:

ID1            ID2          Category    Model       Asset Delivered Date    Scheduled                           
100000000      SMP008483    Western     Ford                ?                   ?
100000001      SMP008484    Eastern     Chevrolet           ?                   ?

【问题讨论】:

  • 如果您愿意使用另一种格式,我建议您使用 JSON,因为它可以为您提供所需的层次结构,并且很容易被多种语言阅读。通过打开文件、遍历每一行并使用字符串例程(如text.split()test.partition())来构建字典数组,不需要太多 Python 代码来解析它。
  • 这些数据在哪里?它的格式是否与您显示的完全一样,纯文本?
  • @TimWilliams 更新原始问题中的数据(基于空格)后,数据现在与显示的完全相同。数据来自 TXT 文件。
  • 如果你想解析它,那么它应该不会太难:你有可预测的 5 行块和看起来像固定宽度的格式。你试过什么吗?

标签: python excel parsing text vbscript


【解决方案1】:

这个有点蹩脚,但它有效。给你:

#!/bin/bash
i=0
while IFS= read -r line;do
echo $line | egrep -q '^[0-9]+'
if test $? -eq 0; then
  id1=$(echo $line | cut -d' ' -f1)
  id2=$(echo $line | cut -d' ' -f2)
  ((i++))
fi
echo $line | egrep -q 'Category'
if test $? -eq 0; then
  cat=$(echo $line | sed -e 's/^.*Category//')
  ((i++))
fi
echo $line | egrep -q 'Model'
if test $? -eq 0; then
  model=$(echo $line | sed -e 's/^.*Model//')
  ((i++))
fi
echo $line | egrep -q 'Asset Delivered Date'
if test $? -eq 0; then
  date=$(echo $line | sed -e 's/^.*Asset Delivered Date//')
  ((i++))
fi
echo $line | egrep -q 'Scheduled'
if test $? -eq 0; then
  sch=$(echo $line | sed -e 's/^.*Scheduled//')
  ((i++))
fi
if test $i -eq 5; then
  echo -e "${id1}\t${id2}\t${cat}\t${model}\t${date}\t${sch}"
  i=0
fi
done <<< "$(cat ${1})"

*不要忘记添加所有字段,否则会损坏。

【讨论】:

  • 是否可以对其进行编辑,以便每个字段可以使用多个单词?
  • 是的,它可以通过使用更“通用”的东西(如 sed)更改“剪切”命令来轻松编辑。我会在今天晚些时候这样做。
  • 完成。它仍然是一个快速脚本,几乎没有任何验证,但如果输入存在,它就可以工作。
  • 您好,到目前为止,谢谢,但您所说的“*不要忘记添加所有字段,因为这样做会破坏。”
  • 这基本上意味着如果由于某种原因您忘记添加字段条目,例如您的条目之一中的“模型”字段,那么脚本将中断,因为他需要“查看' 每个条目的所有 5 个字段行。他们不需要井井有条,但他们需要在一起并且正好是 5 个,不多也不少,否则它会破裂。不过我认为这不是什么大问题。
猜你喜欢
  • 1970-01-01
  • 2020-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-16
  • 2022-11-10
  • 1970-01-01
  • 2021-08-30
  • 2012-11-08
相关资源
最近更新 更多