0

我在 Python 方面的经验有限,所以我一直在使用其他 StackOverflow 问题/答案来指导我的脚本,主要是这个:Python:比较两个 CSV 文件并搜索相似的项目和这个:如何在 python 中删除行 CSV
I我正在尝试从两个单独的 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 中所有在 2009 年 1 月 1 日从位置 384 出发的 ID,然后从该列表中查找哪些 ID 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 页脚中的语法无效,并且光标停在行:对于 vmslist 中的 vms_row:
我没有进一步的解释或错误信息不止于此。我已经尝试重命名我的所有变量,但没有任何东西能超过这个错误,所以我不得不得出结论,我正在尝试做一些非常愚蠢的事情,我看不到它是什么。有什么想法吗?

4

2 回答 2

2

您缺少右括号:

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

Python 直到下一行才知道缺少括号,您的语句作为调用for的一部分毫无意义。csv.writer()

于 2013-07-08T16:34:03.260 回答
1

这个:

matchlist = csv.writer(open("matchlist" + str(ID) + ".csv", "wb")

应该是这样(你最后缺少一个括号):

matchlist = csv.writer(open("matchlist" + str(ID) + ".csv", "wb"))

于 2013-07-08T16:35:48.993 回答