Sep-14-2022, 11:27 AM
mylist = ip.readlines() myset1 = set(mylist)Could be refactored to:
myset1 = set(ip)An open file-objects has the __iter__ method, which yields line by line, but the ending is not stripped away.
Same with the
readlines
method of a file-object.Code with Paths should use pathlib.Path
path2txt = '/home/pedro/myPython/random/' with open(path2txt + 'ip1.txt', 'w') as ip1:With Path:
from pathlib import Path path2txt = Path('/home/pedro/myPython/random/') #with open(path2txt + 'ip1.txt', 'w') as ip1: # then 3 possible ways to use it with path2txt.joinpath('ip1.txt').open("w") as ip1: ... with (path2txt / 'ip1.txt').open("w") as ip1: ... text_file = path2txt / 'ip1.txt' with text_file.open("w") as ip1: ...https://realpython.com/python-pathlib/
The same function has an additional issue.
with open(path2txt + 'ip2.txt', 'w') as ip2: ipstring = '' for i in range(1000): ip = makeIP() ipstring = ipstring + ip # <- here the str gets longer and longer and longer..... ip2.write(path2txt + ipstring)This is very memory efficient because a
str
is immutable.What really happens behind the scene, is the creation of a new
str
, where all substrings can fit.Once
ipstring + ip
is evaluated, the old ipstring
is still in memory and the resulting new str
is in memory.Then the new
str
is assigned to ipstring
.The old
str
, where ipstring
pointed before, is ready for garbage collection.Use the
str.join
method to reduce the memory footprint.ips = [] for i in range(1000): ips.append(makeIP()) ipstring = "\n".join(ips)To save even more memory:
for i in range(1000): ip1.write(makeIP())The
make_ip
function could be simplified:def make_ip(): return ".".join(str(random.randint(0, 255)) for _ in range(4)) + "\n"
Almost dead, but too lazy to die: https://sourceserver.info
All humans together. We don't need politicians!
All humans together. We don't need politicians!