我该如何解析这些数据?

时间:2014-11-28 18:59:19

标签: python regex parsing

我目前正在导入一些csv并使用python解析数据。特别是一列具有不同的格式,我不确定应该使用哪种方法来解析数据。

该列中的数据可以采用以下格式

5.00 LBS
5.00LBS
5.00lbs
5LBS
5 LBS
5 kg

或任何其他单位

我想要做的是将数字存储在一个变量中,将单位存储在另一个变量中,以便稍后在我的Django模型中使用它们并创建一个对象。

import csv
def import_measurements(request):
    path = 'measurements.csv'
    with open(path) as f:
        reader = csv.reader(f)
        for row in reader:
            # unit = row[0] string portion
            # weight =  row[0] number portion
            created = Measurements.objects.create(
                           unit=unit,
                           weight=weight
            )

任何帮助将不胜感激

2 个答案:

答案 0 :(得分:1)

显然你的价值由两部分组成:一个数字(小数或非小数)和一个单位(磅或千克),由一个可选空格分隔。

我会在表单中使用正则表达式:

(\d(?:\.\d{2})?)\s?((?:lbs)|(?:kg))

使用i标志忽略大小写。

第一组包含55.00,第二组包含单位。小写单位,你就拥有它。

向读者留下一个练习,可以处理各种小数分隔符(例如,),并支持千位分隔符。

更轻松但不那么严格的表达可能是:

([0-9.]+)\s?(\w+)

答案 1 :(得分:1)

你可以使用regx:

>>> doc
'5.00 LBS\n5.00LBS\n5.00lbs\n5LBS\n5 LBS\n5 kg'
>>> re.findall('(\d+\.?\d*)\s*([a-zA-Z]+)',doc)
[('5.00', 'LBS'), ('5.00', 'LBS'), ('5.00', 'lbs'), ('5', 'LBS'), ('5', 'LBS'), ('5', 'kg')]