Как я могу удалить дубликаты строк из файла?

WeakSet - это упрощение WeakMap, где ваша ценность всегда будет логической. Это позволяет вам помечать объекты JavaScript, чтобы только что-то делать с ними один раз или поддерживать свое состояние в отношении определенного процесса. Теоретически, поскольку он не должен содержать значение, он должен использовать немного меньше памяти и выполнять несколько быстрее, чем WeakMap.

var [touch, untouch] = (() => {
    var seen = new WeakSet();
    return [
        value => seen.has(value)) || (seen.add(value), !1),
        value => !seen.has(value) || (seen.delete(value), !1)
    ];
})();

function convert(object) {
    if(touch(object)) return;
    extend(object, yunoprototype); // Made up.
};

function unconvert(object) {
    if(untouch(object)) return;
    del_props(object, Object.keys(yunoprototype)); // Never do this IRL.
};
29
задан Shog9 31 July 2009 в 22:43
поделиться

4 ответа

В Unix / Linux используйте команду uniq согласно ответу Дэвида Локка или sort согласно комментарию Уильяма Перселла.

Если вам нужен сценарий Python:

lines_seen = set() # holds lines already seen
outfile = open(outfilename, "w")
for line in open(infilename, "r"):
    if line not in lines_seen: # not a duplicate
        outfile.write(line)
        lines_seen.add(line)
outfile.close()

Обновление: Комбинация sort / uniq удалит дубликаты, но вернет файл с отсортированными строками, которые могут или не могут быть что ты хочешь. Приведенный выше сценарий Python не меняет порядок строк, а просто удаляет дубликаты. Конечно, чтобы приведенный выше скрипт тоже сортировался, просто оставьте outfile.write (line) и вместо этого сразу после цикла выполните outfile.writelines (sorted (lines_seen)) .

61
ответ дан 27 November 2019 в 22:57
поделиться

Если вы используете * nix, попробуйте выполнить следующую команду:

sort <file name> | uniq
35
ответ дан 27 November 2019 в 22:57
поделиться
uniqlines = set(open('/tmp/foo').readlines())

это даст вам список уникальных строк.

записать это обратно в какой-либо файл так же просто, как:

bar = open('/tmp/bar', 'w').writelines(set(uniqlines))

bar.close()
16
ответ дан 27 November 2019 в 22:57
поделиться

получите все ваши строки в списке и сделайте набор строк, и все готово. например,

>>> x = ["line1","line2","line3","line2","line1"]
>>> list(set(x))
['line3', 'line2', 'line1']
>>>

и запишите содержимое обратно в файл.

4
ответ дан 27 November 2019 в 22:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: