2017-01-28 72 views
1

爲了從csv文件中刪除特定的行,我想爲我的行添加一個ID值。當然有幾種方法可以完成,我希望能夠通過可能的方式生成ID。簡單而簡短,但好方法是首選。什麼是生成ID以使行成爲個體的最佳方式?

也許是隨機大號使用random.randint(00000, 99999)例如?但需要檢查可能的重複會讓我覺得有一個更好的解決方案。

另一種方法是將讀取csv文件將1添加到每行的某個變量中。也許你甚至需要找出一種方法來檢查給定的行是否包含實際的csv內容,而不僅僅是\n的結果。我嘗試了這個並取得了成功,但代碼非常漫長和難看。

我敢打賭,我無法想到更好的辦法。我可以在下面找到它。它適用於我的特定行格式和添加新行的方式。這就是我以前所說的。

我正在尋找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

如果添加了幾個字母標識的開始可能是比較明顯的:myID1,myID2, myID3 ...添加前導零可能也會提高可讀性:myID00001。 myID00002 ... – rossum

+0

這些ID的用途是什麼?知道這將有助於確定合適的或最佳的技術。 – 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,最終可能會複製以前使用的ID。

如果您按照ID排序文件,您可以在最後一行的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)) 
相關問題