这行代码
name = ['NAMETHEFIRST,' 'NAMEANOTHERNAME ']
相当于
name = ['NAMETHEFIRST,NAMEANOTHERNAME ']
因为Python如下:C在编译时间上相邻的字符串常量串联。
你说“”“我只得到从NAMETHEFIRST数据线和我从写我的小数据集文件NAMETHEOTHERNAME无数据”“” - 不过你展示不会产生这一结果的代码 ;它会只选择与
"NAMETHEFIRST,NAMEANOTHERNAME ",
启动线,你会得到既定的结果只有在该行居然是:
name = ['NAMETHEFIRST', 'NAMEANOTHERNAME ']
那大概是因为文件中的第二个名字没有如上所示的尾部空间。
其他问题:
csv.writer(outf).writerows(l for l in data if l[0] in name)
试图有点太聪明。如果将其分解为一块大小的块,则可以更轻松地使用调试器或仅打印语句来向您显示实际发生的情况。
试试这个:
print len(name), name
data = csv.reader(open('C:\\bigfile.csv', 'rb')) # ALWAYS open csv files in BINARY mode
with open('C:\\smalldataset.xcl','wb') as outf: # ALWAYS open csv files in BINARY mode
writer = csv.writer(outf)
for row_index, row in enumerate (data): # don't use 'l' as a variable name
print row_index + 1, row
if row[0] in name:
writer.writerow(row)
你说的是两个文件,但是你的代码显然是一个单一的文件进行操作。另外,名称列表的第二个元素后面有空格。这是故意的吗? – SilentGhost 2010-07-20 17:12:06
@SilentGhost:(1)输入大文件,(2)输出小文件,'assert 1 + 1 == 2' – 2010-07-20 22:03:29
@SilentGhost:他的列表只有一个元素。 – 2010-07-20 22:04:22