[英]Iterating through CSV file in python with certain conditions
所以我试图遍历csv文件,如下所示:
time date
25:07 40
0:07 3
0:67 1
0:26 -1
-1:26 4
最后,我必须生成具有适当约束的列表。 如果它不在适当的约束中,那么最后将不会生成该行。 约束如下:1.非法的时间值结构(不是HH:MM)和非法的时间值(HH <0或HH> 23,MM <0或MM> 59)。 2.非法的日期值(日期<1或日期> 31)。
这是我尝试过的:
atm_transaction_time_date = []
my_file = open("atm_file_time_date", "r")
reader = (csv.reader(my_file))
header = my_file.readline()
#to check for illegal time
for line in reader:
if ':' not in (line[0]):
continue
elif int(line[0].split(':')[0]) < 0 or int(line[0].split(':')[0]) > 23:
continue
else:
return (line[0].split(':')[0])
if ':' not in (line[0]):
continue
elif int(line[0].split(':')[1]) < 0 or int(line[0].split(':')[1]) > 59:
continue
else:
return (line[0].split(':')[1])
#to check for illegal date
if 0 > int(line[1]) > 31:
continue
else:
return int(line[1])
atm_transaction = (str(line[0]), int(line[1])
atm_transaction_time_date.append(atm_transaction)
my_file.close()
return atm_transaction_time_date
但它仍然没有工作。 这是错误消息错误TypeError:不可排序的类型:函数elif(line [0] .split(':')[0] <0)或(line [0] .split(' :')[0])> 23:
问题是这样的声明:
int(line[0].split(':')[0] < 0)
您正在更改整个语句的类型,而不仅仅是line [0] .split(':')[0]
它应该是:
int(line[0].split(':')[0]) < 0 or int(line[0].split(':')[0]) > 23
从错误日志中,您可以看到您正在将字符串与int进行比较,这是不允许的。 您所做的只是愚蠢的错误,因为我可以看到您正确编写了以下类似语句:)
这是代码:
import csv
atm_transaction_time_date = []
my_file = open("atm_file_time_date", "r")
reader = (csv.reader(my_file))
header = my_file.readline()
#to check for illegal time
for line in reader:
if ':' not in (line[0]):
continue
elif int(line[0].split(':')[0]) < 0 or int(line[0].split(':')[0]) > 23:
continue
if ':' not in (line[0]):
continue
elif int(line[0].split(':')[1]) < 0 or int(line[0].split(':')[1]) > 59:
continue
if 0 > int(line[1]) > 31:
continue
atm_transaction = (line[0],int(line[1]))
atm_transaction_time_date.append(atm_transaction)
print atm_transaction_time_date
return语句在这里没有任何意义。 您没有正在调用的函数。 Continue语句传递到循环的下一个迭代。 因此,如果if和elif不成立,则意味着它是有效的日期结构,您可以将其附加到列表中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.