代码之家  ›  专栏  ›  技术社区  ›  Jase

在文件中写入随机数

  •  -1
  • Jase  · 技术社区  · 3 年前

    我的任务是生成不同的文件,每个文件都有特定的大小。此大小包括写入文件中的随机数。例如,如果大小为100,则意味着程序需要写入100个随机数并生成一个文件,然后将它们添加到该文件中。我的问题是,通过运行这段代码,我会得到例如100个数字,但它们都是相同的,没有一个是不同的。你能帮我修一下吗?

    import random
    import time
    
    def fillFile(fileSize, fileName):
        for i in range(fileSize):
            values = random.randint(0, fileSize + 1000)
        file = open(fileName + ".txt", "w")
        for i in range(fileSize):
            file.write(f"{i} {values}\n")
    
    fileSizes = [1000, 5000, 10000, 25000, 50000, 100000, 200000]
    
    def readFile(fileName):
        files= open(str(fileName) + ".txt", "r")
        values = []
        for line in files:
            values.append(line.split())
        return values
    
    
    2 回复  |  直到 3 年前
        1
  •  0
  •   Slyphlamen    3 年前

    基本上,您应该更改声明变量“值”的位置

    def fillFile(fileSize, fileName):
        for i in range(fileSize):
            file = open(fileName + ".txt", "w")
            for i in range(fileSize):
                values = random.randint(0, fileSize + 1000)
                file.write(f"{i} {values}\n")
    

    这里的想法是,在原始代码中,生成一个随机数“值”文件大小,然后进入一个循环,在该循环中,将最后生成的“值”写入文件。 其中,出于您的目的,如果您希望随机生成文件中的所有数字,那么您需要在循环中声明它们,或者预先创建一个数字数组,并找到一种方法以您希望的格式写入文件。

    注:

    作为提醒,函数是随机的。randint(a,b)返回一个随机整数N,使得a<=N<=b、 因此,在原始代码中,值=随机。randint(0,fileSize+1000),同时在a=0和b=fileSize+1000之间生成一个随机整数。因此,我想你可能想去掉“+1000”,但这取决于你的目标,我不清楚。

        2
  •  0
  •   Corralien    3 年前

    您可以使用下面的代码替换您的 fillFile 功能:

    for fileSize in fileSizes:
        with open(f'{fileSize}.txt', 'w') as fp:
            pop = range(0, fileSize + 1000)
            print(*random.choices(pop, k=fileSize), sep='\n', file=fp)
    

    关于你的错误 :对于每次迭代,您都会覆盖文件。你应该使用:

    def fillFile(fileSize, fileName):
        with open(fileName + ".txt", "w") as file:
            for i in range(fileSize):
                # your code
                ...