我有一个问题,我有一个CSV文件和相应的SQL类型。现在,脚本应该检查各个列是否对应于这些类型-例如:
A B C D
'Test' '1' '1.23454' '2018-05-05'
'Test2' 'a' '12.1' '2018-05-05-12:45:15'
以及以下sql类型:
A: varchar(15)
B: int
C: double(12,1)
D: timestamp
因此,在运行此脚本时,对于第一行,A和B列的转换成功,但C转换(逗号后面的位置过多)无效,D转换(日期而不是时间戳)也不成功
第二行失败,因为B列包含文本而不是数字。
有没有一种简单的方法可以测试这些强制转换而无需将其实际加载到数据库中?
亲切的问候。
答案 0 :(得分:0)
您将需要打开文件,对其进行遍历,然后检查每个字段的类型是否符合您的期望。
因此,对于第一列,您将验证长度:
if len(column_a_string) >= 15:
raise TypeError("Invalid string length for column_a_string.")
B列,您将验证它是否为int:
if not column_b_int.isdigit():
raise TypeError("Unable to parse column_b_int to integer value.")
C列,检查是否可以将值转换为浮点数:
try:
float(column_c_float)
except ValueError:
print "Unable to cast column_c_float to a floating-point value."
最后一栏:
import datetime
try:
datetime.datetime.strptime(column_d_date, '%Y-%m-%d')
except ValueError:
raise ValueError("Unable to parse column_d_date to a date")