排序csv中的行不按计划工作

时间:2014-04-04 17:34:45

标签: python csv

我遇到了一些似乎很简单的问题。 我有一个列值列表,如果匹配,我想从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)

我可以从输出中看到正在进行匹配。但是当我检查文件时,仍然有匹配。此外,在我之前的过滤尝试中,导致文件被读取,大多数但并非所有(莫名其妙)重复都被过滤掉了。目视检查没有弄清楚为什么有些人没有被过滤掉。

2 个答案:

答案 0 :(得分:1)

如果永远不匹配,要执行某项操作,请使用中断并将else放在forif上。这是一个brief overview

例如,如果我有一些州的小列表,并且我只想打印不包含字母bc的那些,

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)

[尊重评论而编辑。]