Python 将文本字段解析为excel列
我试图解析出超过20000条记录的数据。每条记录有4个字段,前缀为2个字母数字值。下面是一个有2条记录的示例。我目前有一个基于以下链接使用Java的臃肿解决方案:。但我不打算使用这种解决方案,因为仅仅分离记录就太过分了。有没有一种解决方案可以使用VBS、Python或任何其他语言,根据我已经使用的逻辑来分离字段?还是另一种逻辑方法Python 将文本字段解析为excel列,python,excel,parsing,text,vbscript,Python,Excel,Parsing,Text,Vbscript,我试图解析出超过20000条记录的数据。每条记录有4个字段,前缀为2个字母数字值。下面是一个有2条记录的示例。我目前有一个基于以下链接使用Java的臃肿解决方案:。但我不打算使用这种解决方案,因为仅仅分离记录就太过分了。有没有一种解决方案可以使用VBS、Python或任何其他语言,根据我已经使用的逻辑来分离字段?还是另一种逻辑方法 100000000 SMP008483 |--- Category Western |---
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 ? ?
这个有点差劲,但它很管用。给你:
#!/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})"
#/bin/bash
i=0
而IFS=读取-r行;做
echo$行| egrep-q'^[0-9]+'
如果测试$-等式0;然后
id1=$(回音$行|剪切-d'-f1)
id2=$(回声$行|切割-d'-f2)
((i++)
fi
echo$行| egrep-q“类别”
如果测试$-等式0;然后
cat=$(echo$行| sed-e's/^.*Category/'))
((i++)
fi
echo$行| egrep-q“模型”
如果测试$-等式0;然后
model=$(echo$行| sed-e's/^.*model/)
((i++)
fi
echo$行| egrep-q“资产交付日期”
如果测试$-等式0;然后
日期=$(echo$行| sed-e的/^.*资产交付日期//)
((i++)
fi
echo$行| egrep-q“预定”
如果测试$-等式0;然后
sch=$(echo$行| sed-e's/^.*计划的//)
((i++)
fi
如果测试$i-等式5;然后
echo-e“${id1}\t${id2}\t${cat}\t${model}\t${date}\t${sch}”
i=0
fi
完成这一个有点糟糕,但它有效。给你:
#!/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})"
#/bin/bash
i=0
而IFS=读取-r行;做
echo$行| egrep-q'^[0-9]+'
如果测试$-等式0;然后
id1=$(回音$行|剪切-d'-f1)
id2=$(回声$行|切割-d'-f2)
((i++)
fi
echo$行| egrep-q“类别”
如果测试$-等式0;然后
cat=$(echo$行| sed-e's/^.*Category/'))
((i++)
fi
echo$行| egrep-q“模型”
如果测试$-等式0;然后
model=$(echo$行| sed-e's/^.*model/)
((i++)
fi
echo$行| egrep-q“资产交付日期”
如果测试$-等式0;然后
日期=$(echo$行| sed-e的/^.*资产交付日期//)
((i++)
fi
echo$行| egrep-q“预定”
如果测试$-等式0;然后
sch=$(echo$行| sed-e's/^.*计划的//)
((i++)
fi
如果测试$i-等式5;然后
echo-e“${id1}\t${id2}\t${cat}\t${model}\t${date}\t${sch}”
i=0
fi
如果您愿意使用另一种格式,我建议您使用JSON,因为它将为您提供所需的层次结构,并且易于多种语言阅读。通过打开一个文件,遍历每一行,并使用字符串例程(如text.split()
或test.partition()
)来构建一个字典数组,不需要太多Python代码来解析它。这些数据在哪里?它的格式是否与您显示的完全相同,为纯文本?@TimWilliams更新原始问题中的数据(基于空格)后,数据现在与显示的完全相同。数据来自一个TXT文件。如果你想解析它,那么它应该不会太难:你有可预测的5行块和固定宽度的格式。您尝试过什么吗?如果您愿意使用另一种格式,我建议您使用JSON,因为它将为您提供所需的层次结构,并且易于被多种语言阅读。通过打开一个文件,遍历每一行,并使用字符串例程(如text.split()
或test.partition()
)来构建一个字典数组,不需要太多Python代码来解析它。这些数据在哪里?它的格式是否与您显示的完全相同,为纯文本?@TimWilliams更新原始问题中的数据(基于空格)后,数据现在与显示的完全相同。数据来自一个TXT文件。如果你想解析它,那么它应该不会太难:你有可预测的5行块和固定宽度的格式。你试过什么了吗?有没有可能对它进行编辑,以便每个字段可以使用多个单词?是的,可以通过使用更“通用”的命令(如sed)更改“剪切”命令来轻松编辑它。我今天晚些时候再做,好了。这仍然是一个快速的脚本,几乎没有任何验证,但是如果输入存在,它就可以工作。嗨,谢谢,到目前为止,但是你所说的“*不要忘记添加所有字段,因为如果添加,它会断开。”这基本上意味着如果出于某种原因,你忘记添加字段条目,例如,您的一个条目中的“Model”字段,那么脚本将中断,因为他需要“查看”每个条目中的所有5行字段。他们不需要井然有序,但他们需要在一起,精确到5岁,不多也不少,否则就会破裂。我认为这不是一个大问题。是否有可能对其进行编辑,以便每个字段可以使用多个单词?是的,通过使用更“通用”的命令(如sed)更改“剪切”命令,可以轻松地对其进行编辑。我今天晚些时候再做,好了。这仍然是一个快速的脚本,几乎没有任何验证,但是如果输入存在,它就可以工作。嗨,谢谢,到目前为止,但是你所说的“*不要忘记添加所有字段,因为如果添加,它会断开。”这基本上意味着如果出于某种原因,你忘记添加字段条目,例如,您的一个条目中的“Model”字段,那么脚本将中断,因为他需要“查看”每个条目中的所有5行字段。他们不需要井然有序,但他们需要在一起,精确到5岁,不多也不少,否则就会破裂。我认为这不是什么大问题。