2017-09-06 34 views
0

我有一個簡單的腳本來生成隨機的基本上空的文本文件,我正在使用沙箱數據爲另一個項目。對於所有的意圖和目的,它的工作原理,但我注意到,如果選擇一個大於1500的值,所需要生成的文件數量和實際計數有時不匹配。Python文件計數不匹配

我的代碼如下:

import os 
import random 
path = "data/" 
def makeFiles(): 
    count = int(input("How many to make?\n")) 
    for x in range(0,count): 
     num = random.randint(10000,999999) 
     name = path+str(num)+".txt" 
     f = open(name,"w") 
     f.write(str(x)) 
     f.close() 
     print(x) 
makeFiles() 

我使用Linux Mint的Python的3.6(這是本質上的Ubuntu 16.04)。我覺得如果我延遲一段時間,睡眠可能會解決問題,但事實並非如此。製作2500個文件時,它會在這個時候生成2497個常規文件。任何意見,將不勝感激。謝謝!

+4

停止'num = random.randint(10000,999999)'產生兩次相同的隨機數,從而覆蓋您創建的第一個文件? – roganjosh

+0

'name = path + str(x)+「。txt」'name = path + str(num)+「.txt」'' – Dadep

回答

3

要避免與random.randint()重複數字,您可以使用random.sample()。來自@cᴏʟᴅsᴘᴇᴇᴅ的所有其他建議(以及被盜代碼)。

更新 @cᴏʟᴅsᴘᴇᴇᴅ刪除他的回答所以這裏是他的其他建議:

  • 使用os.path.join加入路徑時
  • 使用with...as上下文管理器來管理文件I/Ø
  • 如:

    for x, num in enumerate(random.sample(range(10000, 1000000), count)):   
        name = os.path.join(path, "{}.txt".format(num)) 
        with open(name, "w") as f: 
         f.write(str(x)) 
    
    +0

    啊,枚舉是一個很好的接觸。 +1 –

    +0

    @AChampion根據OP文件的內容應該是計數,而名稱應該是rand。在你的例子中,情況正好相反。 – kaza

    +1

    @bulbus我建議查看['enumerate()']的文檔(https://docs.python.org/3.6/library/functions.html?highlight=enumerate#enumerate),'x'是count ,'num'是隨機數。 – AChampion