2017-09-06 32 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