why cant i see the output, is there something wrong?
def readtask1File(fileName=“books.csv”):
with open(fileName) as infile:
column_names = infile.readline()
keys = column_names.split(“,”)
number_of_columns = len(keys)
list_of_dictionaries =
data = infile.readlines()
list_of_rows =
for row in data:
list_of_rows.append(row.split(","))
infile.close()
for item in list_of_rows:
row_as_a_dictionary = {}
for i in range(number_of_columns):
row_as_a_dictionary[keys[i]] = item[i]
list_of_dictionaries.append(row_as_a_dictionary)
readtask1File()
for i in range(len(list_of_dictionaries)):
print(list_of_dictionaries[i])
I am sorry, but requirement (‘without importing library’) makes it feel like homework. There is battery included module and this should be used.
Some observations: there is no need to iterate over indices in Python. You can do it directly on items:
for item in iterable:
# do something
If csv module not to be used then there are several other built-ins and concepts in Python what can be used. Namely zip, dict, and list comprehension.
In natural language: open the file, read first line as keys and create list of dictionaries from other lines where keys are combined with values on these lines.
# file named 'data.csv' with following content
a,b,c
1,2,3
4,5,6
with open('data.csv') as f:
headers = next(f).rstrip().split(',')
data = [dict(zip(headers, line.rstrip().split(','))) for line in f]
# data
[{'a': '1', 'b': '2', 'c': '3'},
{'a': '4', 'b': '5', 'c': '6'}]
can we keep the values that are associated to A together and same goes for B and C? rather then printing a: 1 b : 2 c: 3. it should look like this ‘a’: ‘1’,‘4’
One additional zip (which is ofter referred as rows to columns) could make something like that happen:
with open('data.csv') as f:
headers = next(f).rstrip().split(',')
stream = (line.rstrip().split(',') for line in f)
data = dict(zip(headers,zip(*stream)))
# data
{'a': ('1', '4'),
'b': ('2', '5'),
'c': ('3', '6')}
sorry but one more question what if i want to use the code that you provided above but for the values inside the dictionary, we add them in a list as integers rather than keeping them as strings?
I appreciate your support thank you!