ChangeMyName
ChangeMyName

Reputation: 7408

write float list to csv file

I have a list of float numbers, its format is:

float_list = [1.13, 0.25, 3.28, ....]

I used following code to write it to a .csv file:

float_str = ""

for result in result_list:
    float_str = float_str + str(result.get_value()) + ","

with open(output_path, "wb") as file:
    writer = csv.writer(file)
    writer.writerow(float_str)

file.close()

where result.get_value() is:

def get_value():
    return float(value)

I expect to see that in each cell, there is a value. However, what I've got looks like:

1   .   1   3   ,    0   .   2    5   ,  3   .   2   8   ,

It seems that each of the digits occupies a cell.

So, may I know how can I solve this issue and get what I expected?

Upvotes: 8

Views: 49189

Answers (4)

Omid Moradipour
Omid Moradipour

Reputation: 11

The below code writes a list of float numbers into a csv file.

import csv

float_str=['1.500','2.48933','7.36945']

with open('output_path','w',newline='') as file:

    write=csv.writer(file, delimiter='\n')
    for num in float_str:
        write.writerow(num)

Upvotes: 1

Yong he
Yong he

Reputation: 51

I just want to write a number, like 1234, into csv file (delimiter=' '), it ends up like 1 2 3 4. I got the following answer from another site but would like to share it here:

number = 1.13
writer.writerow([number])

Upvotes: 4

Martijn Pieters
Martijn Pieters

Reputation: 1122022

The writer.writerow() takes a sequence (a list or tuple), but you are passing in a string instead. By passing in a string, writer.writerow() still treats it as as sequence, and each individual character becomes a column value:

1,.,1,3,,,0,.,2,5,,,3,.,2,8

Moreover, the method converts column to strings for you, don't do this yourself.

Instead build a list of your float values and pass that in:

row = []
for result in result_list:
    row.append(result.get_value())

with open(output_path, "wb") as file:
    writer = csv.writer(file)
    writer.writerow(row)

or even:

with open(output_path, "wb") as file:
    writer = csv.writer(file)
    writer.writerow([r.get_value() for r in result_list])

The delimiter defaults to ,.

Upvotes: 7

Kobi K
Kobi K

Reputation: 7931

Use delimiter and just write the list you don't need to convert it to string:

import csv

float_list = [1.13, 0.25, 3.28]

with open(output_path, "wb") as file:
    writer = csv.writer(file, delimiter=',')
    writer.writerow(float_list)

Output:

1.13,0.25,3.28

Also there is no need to close the file since you used with

Edit:

@Martijn Pieters: delimiter , is default.

From Docs:

A one-character string used to separate fields. It defaults to ','.

This line writer = csv.writer(file, delimiter=',') can be writer = csv.writer(file)

Upvotes: 6

Related Questions