2017-01-28 2 views
1

Чтобы удалить определенные строки из файла csv, я хочу добавить значение ID в мои строки. Конечно, это можно сделать несколькими способами, и я был бы признателен за ввод возможных способов генерации идентификаторов. Предпочтительны простые и короткие, но хорошие способы.Каким будет лучший способ генерировать идентификаторы, чтобы сделать строки индивидуальными?

Возможно, случайный большое количество используя random.randint(00000, 99999) например? Но нужно проверить для возможных дубликатов, заставив меня подумать, что есть лучшее решение.

Другой способ: прочитать файл csv добавить 1 к некоторой переменной для каждой строки. Возможно, вам даже понадобится выяснить способ проверки того, что данная строка содержит фактическое содержимое csv и не является результатом \n. Я пробовал это и имел успех, но код просто очень длинный и уродливый.

Держу пари, что есть лучшие способы, о которых я не могу думать. Мое прохождение можно найти ниже. Он работает для моего конкретного mangemant строки и способа добавления новых строк. Это то, что я использовал к этому моменту.

Я ищу решение для Python 3+, если это не очевидно.

import os 

def ID(filename): 
    if os.path.isfile(filename): 
     if os.path.getsize() == 0: 
      return 1 
     else: 
      ID = 1 
      [ID += 1 for line in open(filename, "r")] 
      return ID 
    else: 
     return 1 
+0

Это может быть более очевидным, если вы добавили несколько букв в начале ID: myID1, myID2, myID3 ... Добавление начальных нулей может также улучшить читаемость: myID00001. myID00002 ... – rossum

+0

Какова цель этих идентификаторов? Знание этого поможет определить подходящую или оптимальную технику. – martineau

+1

@martineau Небольшая программа для добавления/удаления/списка записей, например, лекарств, которые вы принимали, чтобы отслеживать их. Или еда/калории. Что-то вроде того. Вот почему 16-значный ключ не подходит. Вы должны иметь возможность легко удалить его с помощью argparse. '--remove 1232' например. – xvx

ответ

0

Используйте v4 UUID

import uuid 

ID = uuid.uuid4().hex 

Это случайное и гарантированно быть уникальным для большинства практических применений.

+0

Поскольку пользователь должен иметь возможность вручную удалять строки с помощью '--remove ', это было бы не идеально, но полезно знать, что этот модуль существует. – xvx

+0

@xvx Если это так, похоже, вы должны использовать какой-то движок базы данных, такой как sqlite, а не файл csv. –

0

Линии подсчета не являются хорошей идеей, так как если вы удалите строку из середины файла, а затем попытаетесь найти новый идентификатор, вы можете закончить дублирование ранее использованного идентификатора.

Если вы сохранили файл, отсортированный по ID, вы можете просто добавить 1 к идентификатору последней строки.

В качестве альтернативы вы можете использовать uuid для генерации идентификаторов, достаточно случайных, что вам не нужно беспокоиться о столкновениях.

0

Было бы довольно легко создать уникальный N-значных случайных чисел с чем-то вроде этого:

import random 

_seen = set() 
def uniqueID(length): 
    while True: 
     v = int(''.join(str(random.randint(0, 9)) for _ in range(length))) 
     if v not in _seen: 
      _seen.add(v) 
      return v 

for _ in range(10): 
    print(uniqueID(16)) 
Смежные вопросы