python馏分 - 破折号被解析为" 2013" =>分数的文字无效:

时间:2016-05-03 15:38:26

标签: python scrapy

使用scrapy获取食谱,无法解析字符串:

我正在尝试解析这个字符串" 1 - 1 1/2杯Grated Raw Cauliflower"

并且短划线由python解释为以下

" ValueError:Fraction的文字无效:u' \ u2013' "

无论如何我可以错误处理所以整个程序都不会抛出?

概述:

使用正则表达式将字符串解析为数字,度量,项目。 转换为浮动 检测分数 将分数转换为浮动

我试过/除了简单地犯错误#34; min"提供的范围的一面,虽然我理想地想要以某种方式

if re.compile("[^\W\d]").search(quantity):
            match = re.compile("[^\W\d]").search(quantity)
            amount = s[:match.start()]
            grocery = s[item.start():]                                
            if '/' not in amount:
              amount = float(amount)
            elif '/' in amount:                  
              def tryAmount(amount):
                  try:
                    return round(float(sum(Fraction(s) for s in amount.split())), 2)
                  except ValueError:
                    return amount[0]
              amount= tryAmount(amount)
            else:
              amount = amount[0]

1 个答案:

答案 0 :(得分:4)

让我们通过:

quantity = "1 – 1 1/2 cup Grated Raw Cauliflower"
match = re.compile("[^\W\d]").search(quantity)

因此match.group(0)c,意味着amount = s[:match.start()]amount设为"1 – 1 1/2 "

amount.split()将为['1', '\xe2\x80\x93', '1', '1/2'](如果已打印,则为['1', '–', '1', '1/2'])并且您已将每个值传递给Fraction(),而>>> Fraction('–') ... ValueError: Invalid literal for Fraction: '\xe2\x80\x93' 则不能em-dash,甚至是连字符:

sum(Fraction(s) for s in amount.split()))

理解1无论如何都不会做你想要的:如果它按照书面形式工作,它会加起来10.52.5来{ {1}},高于建议值'介于1和1.5'。

之间

我想你可能需要重新审视你提取数字的方法,并解释食谱中的范围!