我正在编写一个python hangman程序,我希望能够从文件中随机生成一个单词,并且它可以工作。但我从网站上获得了一行此代码,这有助于我做我需要做的事情,但我不知道如何。
由于
offset = random.randint(0, os.stat(filename)[6]) # ?????
fd = file(filename, 'rb')
fd.seek(offset)
fd.readline()
return fd.readline()
答案 0 :(得分:7)
os.stat(filename)[6]
只返回filename
命名的文件的大小(以字节为单位)。您可以详细了解os.stat()
in the documentation。
random.randint(...)
生成0到n
之间的随机整数,其中n
是通过os.stat()
获得的文件的大小。
然后代码寻找文件中的(随机)位置。很有可能这个位置在一条线的中间。因此,代码读取部分行并丢弃它。然后它读取下一行并返回它。
最后,代码有一个错误:如果随机位置落在文件的最后一行,则第二个readline()
将无法读取。
编辑另外,正如@Russell Borogove在评论中指出的那样,此方法无法确保以相同的概率选择行。
答案 1 :(得分:1)
要扩展aix的答案,我们在"范围内有一个随机整数"对于该文件,我们使用fd.seek(offset)
转到该位置。我们使用fd.readline()
删除我们所在的行,然后转到下一行。然后我们使用fd.readline()
返回我们所在的整个当前行。
请注意,如果您最终在文件的最后一行,您将返回一个空字符串。要演示将偏移设置为os.stat(filename)[6] - 1
并使用readline两次。
答案 2 :(得分:0)
我尝试将其添加为注释,但无法包含代码示例。
以下是您修复的最后一行/第一行错误所包含的代码:
size = os.stat(filename)[6]
offset = random.randint(0, size) # ?????
fd = file(filename, 'rb')
fd.seek(offset)
fd.readline()
if fd.tell() == size:
fd.seek(0)
return fd.readline()
它不能解决@ russell-borogove所描述的均匀性问题。