This is my function:
def read_file():
textfile = open("Animals.txt", "r", encoding="utf-8")
list = textfile.readlines()
print(list)
textfile.close()
This is Animals.txt:
Animal / Hibernation / Waking Hours / Feeding Time
Bear / winter / 9-20 / 12
Nightowl / - / 21-05 / 21
Sealion / - / 6-18 / 14
How do make a list where the information on each line relates to the animal Name. For example I would like Bear to be connected with winter, 9-20, 12 and also be separated from Nightowl.
My first idea was to separate the list with .split and then moving forward using the list index to navigate the elements. Just printing the list gave this:
['Bear / winter / 9-20 / 12\n', 'Nightowl / - / 21-05 / 21\n', 'Sealion / - / 6-18 / 14 \n', 'Seal / - / 6-18 / 14\n', 'Wolf / - / 6-20 / 12\n', 'Moose / - / 7-19 / 10\n']
The file format is essentially CSV (albeit that the separators are not commas). You could use pandas or the csv module but as this so trivial I suggest:
class Animal:
def __init__(self, animal, hibernation, waking_hours, feeding_time):
self._animal = animal
self._hibernation = hibernation
self._waking_hours = waking_hours
self._feeding_time = feeding_time
def __str__(self):
return f'Animal={self._animal}, Hibernation={self._hibernation}, Waking hours={self._waking_hours}, Feeding time={self._feeding_time}'
list_of_animals = []
with open('Animals.txt') as afile:
for line in afile.readlines()[1:]:
list_of_animals.append(Animal(*map(str.strip, line.split('/'))))
print(*list_of_animals, sep='\n')
Output:
Animal=Bear, Hibernation=winter, Waking hours=9-20, Feeding time=12
Animal=Nightowl, Hibernation=-, Waking hours=21-05, Feeding time=21
Animal=Sealion, Hibernation=-, Waking hours=6-18, Feeding time=14
Animal=Seal, Hibernation=-, Waking hours=6-18, Feeding time=14
Animal=Wolf, Hibernation=-, Waking hours=6-20, Feeding time=12
Animal=Moose, Hibernation=-, Waking hours=7-19, Feeding time=10