如果值是连续的,则在csv文件中打印行

时间:2015-06-17 13:32:47

标签: python csv

我有以下csv文件:

Value1,Value2,Value3,Value4
11,12,27,28
5,6,101,102
111,112,55,56
1,7,33,34
3,4,55,57

我想要打印行,如果Value1& Value2是连续的AND Value3& Value4是连续的。想要的答案是:

11,12,27,28
5,6,101,102
111,112,55,56

我尝试过这样的事情,但它没有工作

f = open('test.csv', 'rU')
for line in csv.reader(f):
    if line [1] == line [0] + 1 & line [4] == line [3] + 1:
        print line
f.close

感谢任何帮助。谢谢!

3 个答案:

答案 0 :(得分:0)

您应该将代码更改为

with open('test.csv', 'r') as f:
    next(f) # Skip first line with headers
    for line in csv.reader(f):
        if line [1] == line [0] + 1 and line [4] == line [3] + 1:
            print line

在if和&中查看和是一个按位AND运算符

答案 1 :(得分:0)

最大的问题是,您必须将&更改为单词and。阅读CoryKramers评论更多关于原因的解释。还有一些事情,在处理文件时使用with open总是更好。你想跳过第一行,因为它只是一个标题行,所以我补充说。您从CSV读取的值是字符串,而不是整数,因此尝试添加到字符串将不起作用,因此您必须将它们转换为整数。最后,当您在列表中没有1 0 4 3索引时,您使用的指示已关闭,您执行了4。应该是1 0 3 2。这会输出你想要的东西:

import csv
with open('test.csv', 'rU') as f:
    csvfile = csv.reader(f, delimiter=',')
    for line in csvfile:
        if 'Value1' not in line:
            if int(line[1]) == int(line[0]) + 1 and int(line[3]) == int(line[2]) + 1:
                print ','.join(line)

答案 2 :(得分:0)

你有一些问题。

  1. 您正在使用&而不是and。 (按位查找& vs)
  2. 您的代码中有拼写错误:line[4]line[3]应分别为line[3]line[2]
  3. 您应该使用int()围绕line[#]进行显式转换。所以int(line[#])
  4. 您需要提升档案,使其无法点击第一行。
  5. 最后,作为一种风格问题,[#]周围不应有额外的空格,您应该使用with open

    这里有一些固定代码:

    import csv
    with open('test.csv', 'r') as f:
        next(f)
        for line in csv.reader(f):
            if int(line[1] == int(line[0]) + 1 and int(line[3]) == int(line[2]) + 1:
                print(line)