Hairy Monkey
Hairy Monkey

Reputation: 5

Exporting a List is producing an empty CSV file

I have a two lists that are zipped together, i am able to print the list out to view but i when i try to export the list into a csv file, the csv file is created but its empty. not sure why as im using the same method to save the two lists separately and it works.

import csv
import random
import datetime
import calendar

with open("Duty Name List.csv") as CsvNameList:
NameList = CsvNameList.read().split("\n")
date = datetime.datetime.now()
MaxNumofDays = calendar.monthrange(date.year,date.month)

print (NameList)
print(date.year)
print(date.month)
print(MaxNumofDays[1])

x = MaxNumofDays[1] + 1
daylist = list(range(1,x))
print(daylist)

ShuffledList = random.sample(NameList,len(daylist))
print(ShuffledList)


RemainderList = set(NameList) - set(ShuffledList)
print(RemainderList)

with open("remainder.csv","w") as f:
    wr = csv.writer(f,delimiter="\n")
    wr.writerow(RemainderList)

AssignedDutyList = zip(daylist,ShuffledList)
print(list(AssignedDutyList))

with open("AssignedDutyList.csv","w") as g:
    wr = csv.writer(g)
    wr.writerow(list(AssignedDutyList))

no error messages are produced.

Upvotes: 0

Views: 209

Answers (1)

snakecharmerb
snakecharmerb

Reputation: 55854

In Python 3, This line

AssignedDutyList = zip(daylist,ShuffledList)

creates an iterator named AssignedDutyList.

This line

print(list(AssignedDutyList))

exhausts the iterator. When this line is executed

wr.writerow(list(AssignedDutyList))

the iterator has no further output, so nothing is written to the file.

The solution is to store the result of calling list on the iterator in a variable rather than the iterator itself, in cases where the content of an iterator must be reused.

AssignedDutyList = list(zip(daylist,ShuffledList))
print(AssignedDutyList)

with open("AssignedDutyList.csv","w") as g:
    wr = csv.writer(g)
    wr.writerow(AssignedDutyList)

As a bonus, the name AssignedDutyList now refers to an actual list, and so is less confusing for future readers of the code.

Upvotes: 1

Related Questions