我正在尝试使用csv.DictReader
读取文件我有一个应该是整数的字段。如果它是空的,我会将其设置为DEFAULT
如果它是一个整数我什么也不做。如果它不是一个整数,我检查它是否是一个带引号的整数(like '1234')
。如果是这样我将它转换为整数.Else引发一个异常。
如果它是空的,或者它是一个整数,它按预期工作。如果它是带引号的整数(like '1234')
,则会引发异常integer invalid literal for float(): '1234'
。
在这种情况下不应该引发异常。
我认为它与DictReader读取csv文件的方式有关。 Everyhting else就好了。请帮忙
if not line[key]:
line[key]='DEFAULT'
elif not isinstance(line[key], (int, long, float)) :
try:
line[key]=float(line[key])
except Exception,e :
print e
答案 0 :(得分:4)
问题是单引号是字符串的一部分:
In [7]: float("'1234'")
ValueError: invalid literal for float(): '1234'
如果删除它们,事情应该有效:
In [8]: float("'1234'".strip("'"))
Out[9]: 1234.0
答案 1 :(得分:1)
这可能不是最聪明的方法,但如果你想确保字符串中只有数字,你可以删除所有非数字。
>>> import string
>>> extract = lambda s, charset: "".join(c for c in s if c in charset)
>>> float( extract("'h0424.234\"foo", string.digits + ".") )
424.234
答案 2 :(得分:0)
如果您的文字类似于“'1234'”或“1234”和“1234”,您可以在转换前使用替换:
data = ["'1234'", '"1234"', '1234', '', 1234]
[float(str(a).replace("'","").replace('"','')) if str(a).strip() else 'DEFAULT' for a in data]