生成ID以使行个性化的最佳方法是什么?

时间:2017-01-28 18:07:12

标签: python python-3.x csv uniqueidentifier

为了从csv文件中删除特定行,我想在行中添加ID值。当然,有几种方法可以完成,我很欣赏有关生成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

3 个答案:

答案 0 :(得分:0)

使用v4 UUID

import uuid

ID = uuid.uuid4().hex

它是随机的,并且保证在大多数实际应用中都是独一无二的。

答案 1 :(得分:0)

计算行不是一个好主意,因为如果从文件中间删除一行然后尝试查找新ID,则最终可能会复制以前使用的ID。

如果保持文件按ID排序,则只需将1添加到最后一行的ID即可。

或者,您可以使用uuid随机生成标识符,而不必担心会发生冲突。

答案 2 :(得分: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))