我遇到了一些似乎很简单的问题。 我有一个列值列表,如果匹配,我想从csv中排除[在XLS模式下从Python保存]。我之前遇到过这个问题并认为我找到了一个笨拙的工作 - 但我似乎错了。
编辑:CSV每行有9列。 类型包括:text,int,text,text,int,text,text,int,text
基本上,我有一个清单: [14,1817],[14,607],[14,514],[8,31],[8,654],[8,1045]
并且如果行值匹配两者,例如row [1] == 14和row [4] == 817,应该跳过该行。否则应将其写入新的csv。
基本上:
for something in ([14, 817],[14, 607],[14, 514],[8, 31],[8, 654],[8, 1045]):
check1a = int(something[0])
check2a = int(something[1])
check1b = int(row[1])
check2b = int(row[4])
if (check1a == check1b) and (check2a == check2b):
print row
#or 'pass' in non-debugging mode
else:
thecsv.writerow(row)
我可以从输出中看到正在进行匹配。但是当我检查文件时,仍然有匹配。此外,在我之前的过滤尝试中,导致文件被读取,大多数但并非所有(莫名其妙)重复都被过滤掉了。目视检查没有弄清楚为什么有些人没有被过滤掉。
答案 0 :(得分:1)
如果永远不匹配,要执行某项操作,请使用中断并将else
放在for
上if
上。这是一个brief overview。
例如,如果我有一些州的小列表,并且我只想打印不包含字母b
或c
的那些,
data = ['alabama', 'alaska', 'arizona', 'arkansas', 'california', 'georgia']
for state in data:
for letter in ['b', 'c']:
if letter in state: # or whatever condition would be a match
break
else:
print state
输出:
alaska
arizona
arkansas
georgia
在您的情况下,假设您已定义row
,则需要
for something in ([14, 817],[14, 607],[14, 514],[8, 31],[8, 654],[8, 1045]):
check1a = int(something[0])
check2a = int(something[1])
check1b = int(row[1])
check2b = int(row[4])
if (check1a == check1b) and (check2a == check2b):
print row
break
#or 'pass' in non-debugging mode
else:
thecsv.writerow(row)
答案 1 :(得分:0)
我接受了上述答案。我也在考虑以下几点:
skipme = [14, 817],[14, 607],[14, 514],[8, 31],[8, 654],[8, 1045]
check1b = int(row[1])
check2b = int(row[4])
matchpair = [check1b, check2b]
if matchpair not in skipme:
thecsv.writerow(row)
[尊重评论而编辑。]