我是python的新手,正在尝试读取一个csv文件并验证数据以确保所有数据都在特定范围内。每列都有不同的规格。
示例: 第0列中的所有数据必须在1到500之间 第1列中的所有数据必须在2.5到50.5之间
我可以毫无问题地读取csv,但是当我尝试验证某一列的数据时,似乎只有第一个条目正在被验证,程序只是为每行重新打印第一个条目的通过或失败。
csv文件示例:
1,2
100,2.5
1000,3.5
#looking for just greater than or equal to 1
import csv
with open("csvdata.csv", "r") as f:
csvreader = csv.reader(f, delimiter= ",")
for row in csvreader:
if 1 <= row[0]:
print "pass"
else:
print "fail"
#looking for greater than or equal to 1 and less than or equal to 500
import csv
with open("csvdata.csv", "r") as f:
csvreader = csv.reader(f, delimiter= ",")
for row in csvreader:
if 1 <= row[0] <= 500:
print "pass"
else:
print "fail"
我希望第一个代码片段产生:
pass
pass
pass
它确实可以,但是当我将其从if 1 < row[0]:
更改为if 10000 < row[0]:
时,仍然会给出所有通过消息。
我希望第二个片段产生:
pass
pass
fail
但是会产生:
fail
fail
fail
答案 0 :(得分:2)
您的代码看起来几乎是正确的,但是您的验证消息并没有告诉您很多有用的信息,这就是为什么您不能准确地说出它是否有效的原因。
您需要解决的主要问题是.csv中的值是字符串,因此测试if 1 <= row[0] <= 500
不能按您期望的那样工作,在Python 3中,它会给您一个有用的错误消息,而不是悄悄地执行意外。在进行比较之前,将数字转换为int
。
with open("csvdata.csv", "r") as f:
csvreader = csv.reader(f, delimiter= ",")
for row in csvreader:
if 1 <= int(row[0]) <= 500:
print "row {0} pass value is in range".format(csvreader.line_num)
else:
print "row {0} fail value is {1} out of range".format(csvreader.line_num, row[0])
作为一个附带说明,如果您不熟悉Python,那么您真的不应该在学习Python 2上投入精力。请考虑安装Python 3并将精力集中在此方面。