如何创建一个检查csv文件是否有效的函数? (蟒蛇)

时间:2013-10-24 05:37:59

标签: python csv

我有一个像这样的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

3 个答案:

答案 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)

只有在检查完所有行

后才返回true
def 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