我目前正在导入一些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
)
任何帮助将不胜感激
答案 0 :(得分:1)
显然你的价值由两部分组成:一个数字(小数或非小数)和一个单位(磅或千克),由一个可选空格分隔。
我会在表单中使用正则表达式:
(\d(?:\.\d{2})?)\s?((?:lbs)|(?:kg))
使用i
标志忽略大小写。
第一组包含5
或5.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')]