import array
import os
import random
class YobaRandom:
SIZE_LIMIT = 640 * 1024
def __init__ ( self , file ) :
fsize = os .path .getsize ( file )
self .bigfile = fsize > self .SIZE_LIMIT
fh = open ( file , encoding= 'utf=8' , newline= '' )
if self .bigfile :
arr = array .array ( 'L' )
offset = 0
for line in fh:
arr.append ( offset)
offset += len ( line)
self .fh = fh
self .indexes = arr
else :
self .values = [ val.rstrip ( ) for val in fh]
fh.close ( )
def __del__ ( self ) :
if self .bigfile :
self .fh .close ( )
def choice( self ) :
if self .bigfile :
idx = random .randint ( 0 , len ( self .indexes ) - 1 )
offset = self .indexes [ idx]
self .fh .seek ( offset)
return self .fh .readline ( ) .rstrip ( )
else :
return random .choice ( self .values )
yr = YobaRandom( 'list.txt' )
print ( yr.choice ( ) )
aW1wb3J0IGFycmF5CmltcG9ydCBvcwppbXBvcnQgcmFuZG9tCgoKY2xhc3MgWW9iYVJhbmRvbToKICAgIFNJWkVfTElNSVQgPSA2NDAgKiAxMDI0CgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGUpOgogICAgICAgIGZzaXplID0gb3MucGF0aC5nZXRzaXplKGZpbGUpCiAgICAgICAgc2VsZi5iaWdmaWxlID0gZnNpemUgPiBzZWxmLlNJWkVfTElNSVQKICAgICAgICBmaCA9IG9wZW4oZmlsZSwgZW5jb2Rpbmc9J3V0Zj04JywgbmV3bGluZT0nJykKICAgICAgICBpZiBzZWxmLmJpZ2ZpbGU6CiAgICAgICAgICAgIGFyciA9IGFycmF5LmFycmF5KCdMJykKICAgICAgICAgICAgb2Zmc2V0ID0gMAogICAgICAgICAgICBmb3IgbGluZSBpbiBmaDoKICAgICAgICAgICAgICAgIGFyci5hcHBlbmQob2Zmc2V0KQogICAgICAgICAgICAgICAgb2Zmc2V0ICs9IGxlbihsaW5lKQogICAgICAgICAgICBzZWxmLmZoID0gZmgKICAgICAgICAgICAgc2VsZi5pbmRleGVzID0gYXJyCiAgICAgICAgZWxzZToKICAgICAgICAgICAgc2VsZi52YWx1ZXMgPSBbdmFsLnJzdHJpcCgpIGZvciB2YWwgaW4gZmhdCiAgICAgICAgICAgIGZoLmNsb3NlKCkKCiAgICBkZWYgX19kZWxfXyhzZWxmKToKICAgICAgICBpZiBzZWxmLmJpZ2ZpbGU6CiAgICAgICAgICAgIHNlbGYuZmguY2xvc2UoKQoKICAgIGRlZiBjaG9pY2Uoc2VsZik6CiAgICAgICAgaWYgc2VsZi5iaWdmaWxlOgogICAgICAgICAgICBpZHggPSByYW5kb20ucmFuZGludCgwLCBsZW4oc2VsZi5pbmRleGVzKSAtIDEpCiAgICAgICAgICAgIG9mZnNldCA9IHNlbGYuaW5kZXhlc1tpZHhdCiAgICAgICAgICAgIHNlbGYuZmguc2VlayhvZmZzZXQpCiAgICAgICAgICAgIHJldHVybiBzZWxmLmZoLnJlYWRsaW5lKCkucnN0cmlwKCkKICAgICAgICBlbHNlOgogICAgICAgICAgICByZXR1cm4gcmFuZG9tLmNob2ljZShzZWxmLnZhbHVlcykKCgp5ciA9IFlvYmFSYW5kb20oJ2xpc3QudHh0JykKcHJpbnQoeXIuY2hvaWNlKCkpCg==
stdout
stderr
Traceback (most recent call last):
File "./prog.py", line 39, in <module>
File "./prog.py", line 10, in __init__
File "/usr/lib/python3.7/genericpath.py", line 50, in getsize
return os.stat(filename).st_size
FileNotFoundError: [Errno 2] No such file or directory: 'list.txt'
Exception ignored in: <function YobaRandom.__del__ at 0x7f0652895f28>
Traceback (most recent call last):
File "./prog.py", line 26, in __del__
AttributeError: 'YobaRandom' object has no attribute 'bigfile'