我使用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:
我没有得到进一步的解释或错误信息。我已经尝试重命名我的所有变量,没有任何事情超过这个错误,所以我必须得出结论我正在尝试做一些非常愚蠢的事情,我无法看到它是什么。有什么想法吗?
答案 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”))