#python
#python
Вопрос:
Мне нужен быстрый способ подсчета уникальных значений из CSV (это действительно большой файл (> 100 МБ), который нельзя открыть, например, в Excel), и я подумал о создании скрипта Python.
CSV выглядит так:
431231
3412123
321231
1234321
12312431
634534
Мне просто нужно, чтобы скрипт возвращал, сколько разных значений находится в файле. Например. для приведенного выше желаемого результата будет:
6
Пока это то, что у меня есть:
import csv
input_file = open(r'C:UsersguillDownloadsuu.csv')
csv_reader = csv.reader(input_file, delimiter=',')
thisdict = {
"UserId": 1
}
for row in csv_reader:
if row[0] not in thisdict:
thisdict[row[0]] = 1
print(len(thisdict)-1)
Кажется, работает нормально, но мне интересно, есть ли лучший / более эффективный / элегантный способ сделать это?
Комментарии:
1. да. используйте set вместо dict .
2. Если файл состоит исключительно из чисел, как вы показали, что такое
UserId
?3. @AbhijitSarkar, ты можешь это проигнорировать. Раньше в файле был ‘userId’ в качестве заголовка, но его больше нет, поэтому он унаследован. Я удалю это, чтобы избежать путаницы. Вот почему на выходе также есть -1.
4.
print(len(set(open('path/to/file.csv'))))
должно сработать. Он выводит количество уникальных строк в файле. Он также экономит память, поскольку не читает все сразу, а вместо этого читает файл построчно и добавляет текущую строку в набор.5. @yosukesabai Волшебный однострочник хорош для людей, которые знают, как это сделать. Обычно они не являются хорошим решением для людей, которым нужно запрашивать решения. Вот почему я оставил это в качестве комментария. Пошаговые решения помогают неопытным пользователям гораздо больше.
Ответ №1:
Набор больше подходит для этой проблемы, чем словарь:
with open(r'C:UsersguillDownloadsuu.csv') as f:
input_file = f
csv_reader = csv.reader(f, delimiter=',')
uniqueIds = set()
for row in csv_reader:
uniqueIds.add(row[0])
print(len(uniqueIds))
Ответ №2:
используйте set вместо dict , вот так
import csv
input_file = open(r'C:UsersguillDownloadsuu.csv')
csv_reader = csv.reader(input_file, delimiter=',')
aa = set()
for row in csv_reader:
aa.add(row[0])
print(len(aa))