[Tutor] help cvs module writerow issue (Now Fixed)
David Jamieson
david.jamieson at gmail.com
Fri Aug 21 14:53:39 CEST 2009
> Hi All,
>
> I am looking to make an append to csv file function more dynamic by
> allowing it to receive a variable number of arguments to write out to
> a single a csv file row. The funtion is an append to file function
> that writes out test date to a csv file. Reason for trying to make it
> dynamic is to allow for future expansion of data capture during a test
> run.
> I have an issue when trying to format the output to the
> csv.write(file).writerow() call to accept the variable number of
> arguments as individual cell values when written to the csv file. I
> have tried a few ways to escape the variable values but to no avail.
> When I check the csv file it has the timestamp in one cell on the row
> and the data in the second cell '1','2','3','4','5' Has this issue to
> do with the output_str being a str type and the writerow not
> interpreting it correctly. I added a number 2 to the writerow line to
> prove that I can write to an individual cell
>You seem to misunderstand writerow(). You don't have to escape the
>values yourself, the csv module will do that.
> function call
> =========
> append_to_file(output_file_name,'1','2','3','4','5')
>
> file
> ==
> output_file_name = 'C:\\rubbish.csv'
>
> function def
> ========
> def append_to_file(append_file_name,*values):
> #Open the test results file and append test data.
> output_str =' '
> file_out = open(append_file_name,'ab')
> #Creating a timestamp for the test results
> time = datetime.datetime.now()
> time_stamp = time.ctime()
> #Building a output str to follow the syntax required for writerow
> 'x','x','x'
> for x in values:
> output_str = output_str+"'"+x+"'"+","
> str_length = len(output_str)
> #removing the last , from the output_str variable
> output_str = output_str[0:(str_length-1)]
>You could write this more simply as
>output_str = ','.join("'"+x+"'" for x in values)
>but see below for what you really want.
> print "The final output string is ",output_str
> print "The output string is of type ",type(output_str)
> #list(output_str)
> csv.writer(file_out).writerow([time_stamp, output_str]+['2'])
>Here you are saying that you want to write a row with three elements -
>the time stamp, the string you constructed in output_str, and the
>string '2'. That's not really what you want - you want each value in a
>separate cell. Skip all the output_str stuff and just
>csv.writer(file_out).wrinerow([time_stamp] + list(values) + ['2'])
>Kent
Hi Kent,
thank you for your help in sorting out my writerow issue and for the
better way to join strings. I have the code applied to my project.
Cheers David.
More information about the Tutor
mailing list