Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将文本字段解析为excel列_Python_Excel_Parsing_Text_Vbscript - Fatal编程技术网

Python 将文本字段解析为excel列

Python 将文本字段解析为excel列,python,excel,parsing,text,vbscript,Python,Excel,Parsing,Text,Vbscript,我试图解析出超过20000条记录的数据。每条记录有4个字段,前缀为2个字母数字值。下面是一个有2条记录的示例。我目前有一个基于以下链接使用Java的臃肿解决方案:。但我不打算使用这种解决方案,因为仅仅分离记录就太过分了。有没有一种解决方案可以使用VBS、Python或任何其他语言,根据我已经使用的逻辑来分离字段?还是另一种逻辑方法 100000000 SMP008483 |--- Category Western |---

我试图解析出超过20000条记录的数据。每条记录有4个字段,前缀为2个字母数字值。下面是一个有2条记录的示例。我目前有一个基于以下链接使用Java的臃肿解决方案:。但我不打算使用这种解决方案,因为仅仅分离记录就太过分了。有没有一种解决方案可以使用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           ?                   ?

这个有点差劲,但它很管用。给你:

#!/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岁,不多也不少,否则就会破裂。我认为这不是什么大问题。