我有一个用分号分隔的csv文件,其格式如下:
indx1; string1; char1; entry1
indx2; string1; char2; entry2
indx3; string2; char2; entry3
indx4; string1; char1; entry4
indx5; string3; char2; entry5
我想以列表的形式(不使用pandas或numpy)获得此文件的第一列和第二列的唯一条目。特别是这些是我想要的列表:
[string1, string2, string3]
[char1, char2]
顺序无关紧要,我希望操作很快。
目前,我正在使用命令读取文件(例如'data.csv')
with open('data.csv') as csv_file:
csv_reader = csv.reader(csv_file, delimiter=';')
我正在使用python 2.7。实现我想要的功能的最快方法是什么?我将不胜感激。
答案 0 :(得分:2)
您可以使用sets来跟踪所需列中已经看到的值。由于您说顺序无关紧要,因此您可以在处理完所有行后将集合转换为列表:
import csv
col1, col2 = set(), set()
with open('data.csv') as csv_file:
csv_reader = csv.reader(csv_file, delimiter=';', skipinitialspace=True)
for row in csv_reader:
col1.add(row[1])
col2.add(row[2])
print list(col1), list(col2) # ['string1', 'string3', 'string2'] ['char2', 'char1']
答案 1 :(得分:1)
这应该有效。您可以将其用作基准。
myDict1 = {}
myDict2 = {}
with open('data.csv') as csv_file:
csv_reader = csv.reader(csv_file, delimiter=';')
for row in csv_reader:
myDict1[row[1]] = 0
myDict2[row[2]] = 0
x = myDict1.keys()
y = myDict2.keys()