我有以下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
感谢任何帮助。谢谢!
答案 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)
你有一些问题。
&
而不是and
。 (按位查找& vs)line[4]
和line[3]
应分别为line[3]
和line[2]
。line[#]
进行显式转换。所以int(line[#])
。最后,作为一种风格问题,[#]
周围不应有额外的空格,您应该使用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)