在文件中写入随机数
Writing random numbers in file
我的任务是生成不同的文件,每个文件都有特定的大小。此大小包括写入文件的随机数。例如,如果大小为 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
基本上你应该改变声明变量“values”的位置
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")
这里的想法是,在您的原始代码中,您生成一个随机数“值”fileSize 次,然后进入一个循环,在该循环中将最后生成的“值”写入您的文件。
至于您的目的,如果您希望随机生成文件中的所有数字,那么您需要在循环内声明它们,或者 pre-create 您的数字数组并找到一种编写方法在你的文件中你想要的格式。
注:
提醒一下,函数 random.randint(a, b) returns 一个随机整数 N,满足 a <= N <= b。因此,在您的原始代码中,values = random.randint(0, fileSize + 1000) 同时在 a=0 和 b=fileSize+1000 之间生成一个随机整数。因此,您可能想去掉我认为的“+1000”,但这又取决于我不清楚的目标。
您可以使用下面的代码替换您的 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
...
我的任务是生成不同的文件,每个文件都有特定的大小。此大小包括写入文件的随机数。例如,如果大小为 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
基本上你应该改变声明变量“values”的位置
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")
这里的想法是,在您的原始代码中,您生成一个随机数“值”fileSize 次,然后进入一个循环,在该循环中将最后生成的“值”写入您的文件。 至于您的目的,如果您希望随机生成文件中的所有数字,那么您需要在循环内声明它们,或者 pre-create 您的数字数组并找到一种编写方法在你的文件中你想要的格式。
注:
提醒一下,函数 random.randint(a, b) returns 一个随机整数 N,满足 a <= N <= b。因此,在您的原始代码中,values = random.randint(0, fileSize + 1000) 同时在 a=0 和 b=fileSize+1000 之间生成一个随机整数。因此,您可能想去掉我认为的“+1000”,但这又取决于我不清楚的目标。
您可以使用下面的代码替换您的 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
...