-1

我有一个这样的 csv 文件:test1.csv

read_start,read_end
22,90
15,88
10,100

测试2.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')

如果我测试这段代码,它将返回 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
4

3 回答 3

2
data = csv.reader(open(alignment_filename,'r'))
data.next()

print all([row[0]<row[1] for row in data])
于 2013-10-24T05:58:23.357 回答
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

read_start,read_end在 test1.csv 中看到,所以我添加f.readline()以传递标题行,如果您的实际数据没有这样的行,只需将其从代码中删除。

于 2013-10-24T05:55:49.877 回答
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
于 2013-10-24T05:53:20.323 回答