我有一个像这样的csv文件 name:test1.csv
read_start,read_end
22,90
15,88
10,100
test2.csv
read_start,read_end
10,100
100,10
8,10
我的问题是 如何创建一个代码,可以检查read_start中的所有值是否小于或等于read_end中的值返回True 如果read_start的任何值大于read_end
,则返回False示例:
validate_alignment(' test1.csv&#39)
如果我测试这段代码,它将返回True
test2.csv将为False
这是我试过的
import csv
def validate_alignment(alignment_filename):
file=open(alignment_filename)
contentss=csv.reader(file)
for x in contentss:
if len(x)==0:
return False
elif len(x)!=0:
if x[0]<x[1]:
return True
else:
return False
答案 0 :(得分:2)
data = csv.reader(open(alignment_filename,'r'))
data.next()
print all([row[0]<row[1] for row in data])
答案 1 :(得分:1)
import csv
def validate_alignment(alignment_filename):
f = open(alignment_filename) # avoid using key word `file`
f.readline() # pass the head line
contents = csv.reader(f)
for row in contents:
if len(row) == 0:
return False
row = map(int, row) # cast read_start and read_end to integer
if row[0] > row[1]:
return False
return True
我们来测试一下:
>>> validate_alignment("test1.csv")
True
>>> validate_alignment("test2.csv")
False
我在test1.csv中看到read_start,read_end
,所以我添加了f.readline()
来传递头行,如果您的实际数据没有这样的行,只需将其从代码中删除即可。
答案 2 :(得分:0)
只有在检查完所有行
后才返回truedef validate_alignment(alignment_filename):
file=open(alignment_filename)
contentss=csv.reader(file)
for x in contentss:
if len(x)==0:
return False
elif int(x[0])>int(x[1]):
return False
return True