从CSV文件中提取没有重复的列表

Spe*_*her 0 python csv

我有一个如下所示的数据集:

id,created_at,username
1,2006-10-09T18:21:51Z,hey
2,2007-10-09T18:30:28Z,bob
3,2008-10-09T18:40:33Z,bob
4,2009-10-09T18:47:42Z,john
5,2010-10-09T18:51:04Z,brad
...
Run Code Online (Sandbox Code Playgroud)

我包含1M +行.我想使用python从中提取用户名列表而不重复.到目前为止我的代码看起来像这样:

import csv

file1 = file("sample.csv", 'r')
file2 = file("users.csv", 'w')

reader = csv.reader(file1)
writer = csv.writer(file2)

rownum = 0
L = []
for row in reader:
    if not rownum == 0:
        if not row[2] in L:
            L.append(row[2])
            writer.writerow(row[2])

    rownum += 1
Run Code Online (Sandbox Code Playgroud)

我有几个问题:1 - 我在users.csv中的输出如下所示:

h,e,y
b,o,b
j,o,h,n
b,r,a,d
Run Code Online (Sandbox Code Playgroud)

如何删除每个字母之间的逗号?

2 - 我的代码不是很优雅,有没有办法将csv文件作为矩阵导入以选择最后一行,然后在javascript中使用像underscore.js这样的优雅库来删除重复项?

非常感谢

Ash*_*ary 5

您可以使用set此处,它提供O(1)O(N)列表相比的项查找.

seen = set()
add_  = seen.add
next(reader) #skip header
writer.writerows([row[-1]] for row in reader if row[-1] not in seen
                                                        and not add_(row[-1]))
Run Code Online (Sandbox Code Playgroud)

并始终使用with语句处理文件,它会自动为您关闭文件:

with file("sample.csv", 'r') as file1, file("users.csv", 'w') as file2:
    #Do stuff with file1 and file2 here
Run Code Online (Sandbox Code Playgroud)