2017-02-18 48 views
0

我正在嘗試將大整數寫入文件中。將uuid4大整數加到文件中

該文件包含一個長度爲8字節的ID--我想在該文件中寫入一個新的隨機ID。我正在使用uuid4生成一個隨機數,看起來不錯,但是非常大。

new_id = str(uuid.uuid4().int>>64) # generate a 64bit ID. 
foo = fi.read() # read current file 
bar = re.search(b'MyOLDID', foo) # search for value 
fi.seek(bar.start()) 
old_id = fi.read(8) 
new_id = uuid.uuid4().int>>64 # generate ID.  
faz = foo.replace(bytes(old_id), new_id) 

如何將舊ID替換爲新ID?

+0

不知道你想要什麼?你想一個方法來生成一個8字節的隨機整數,或者你想知道如何UUID保存到一個文件? – Bitonator

+0

我想在文件'fi'中隨機生成並替換8個字節的ID。 foo是字節,我可以找到我的old_id和它的開始位置 - 當我嘗試將整數new_id轉換爲寫入文件的字節時,我得到一個內存錯誤,因爲它是一個大整數。 – Xeberdee

回答

1

您可以使用os.urandom獲得隨機字節:如果你想可讀字符

In [1]: import os 

In [2]: os.urandom(8) 
Out[2]: b'\xe2\xf4~_n.\xe0X' 

(例如,從IPython的會話)

,編碼與例如隨機數據BASE64。

In [3]: import base64 

In [4]: base64.b64encode(os.urandom(6)) 
Out[4]: b'NeCBB8jF' 

編碼過程使數據變長,所以在這種情況下只需要6個字節。

如果你需要的數字:

In [5]: ''.join(str(j) for j in os.urandom(4))[:8] 
Out[5]: '22310824' 
+0

這對我非常有用,謝謝 - 我也在這裏試驗最後一個想法,但最終將8個隨機字節直接寫入文件,如第一個示例中所示。 – Xeberdee