Python脚本语法错误

时间:2013-07-08 16:30:10

标签: csv python-2.7 compare

我使用Python的经验有限,所以我一直在使用其他StackOverflow问题/答案来指导我的脚本,主要是这个:Python: Comparing two CSV files and searching for similar items和这一个:How to Delete Rows CSV in python
我试图匹配来自两个单独的csv的ID,每个csv看起来大致如下:

ID trip  date     location
1   1    1/1/2009 384
1   2    1/3/2009 384
1   3    1/7/2009 467
2   1    1/2/2009 842
2   2    1/3/2009 362

我正在尝试根据每个ID所需的行程进行匹配,因此对于csv1中的ID 1,我会查找csv2中的所有ID,这些ID在2009年1月1日从位置384开始,然后从该列表中寻找其中哪些也在2009年1月3日从位置384开始,依此类推,直到csv2中只有一个ID与csv1中的ID相匹配:匹配。这是我的代码:

import csv, sys, fileinput

f1 = open('personal2009.csv', 'rb')
f2 = open('company2009.csv', 'rb')

c1 = csv.reader(f1)
c2 = csv.reader(f2)

vmslist = [row for row in c2]

matchDict = {}
ID_list = []
ID = 0
for log_row in c1:
    if log_row[0] != ID:
        ID = log_row[0] 
        matchlist = csv.writer(open("matchlist" + str(ID) + ".csv", "wb")
        for vms_row in vmslist:
            if vms_row[2] == log_row[2] and vms_row[3] == log_row[3]:
                matchlist.writerow(vms_row)
    elif log_row[0] in ID_list:
        continue
    else:
        f = fileinput.input("matchlist" + str(ID) + ".csv", inplace=True)
        w = csv.writer(sys.stdout)
        for match_row in csv.reader(f):
            if match_row[2] == log_row[2] and match_row[3] == log_row[3]:
                w.writerow(row)
        if len(list(w)) == 1:
            matchDict[str(ID)] = match_row[0]
            vessel_list.append(str(ID))

f1.close()
f2.close()
matchlist.close()

每当我尝试在PythonWin中调试或运行代码时,我在PythonWin的页脚中收到错误无法运行脚本 - 语法错误 - 语法无效,并且光标停在该行:< strong> for vms_row in vmslist:
我没有得到进一步的解释或错误信息。我已经尝试重命名我的所有变量,没有任何事情超过这个错误,所以我必须得出结论我正在尝试做一些非常愚蠢的事情,我无法看到它是什么。有什么想法吗?

2 个答案:

答案 0 :(得分:2)

您缺少右括号:

matchlist = csv.writer(open("matchlist" + str(ID) + ".csv", "wb")
#                -----^  --^ 2 opening                        --^ but one missing here.

Python无法知道在下一行之前缺少一个括号,而for语句在csv.writer()调用中没有意义。

答案 1 :(得分:1)

此:

  

matchlist = csv.writer(open(“matchlist”+ str(ID)+“。csv”,“wb”)

应该是这个(你最后错过了一个括号):

  

matchlist = csv.writer(open(“matchlist”+ str(ID)+“。csv”,“wb”))