如何在Python中将浮点数列写入CSV文件并每行一个值?
问题描述
需要将包含3个浮点数的列表:
least_scores=[14.285714285714286, 14.375, 16.5]
写入CSV文件,要求每个值单独占一行,期望输出内容:
14.285714285714286 14.375 16.5
但现有代码存在两种问题:
- 使用
writer.writerow(least_scores)时,所有数值被写入同一行; - 改用
writer.writerows或循环调用writer.writerows(nums)时,抛出float对象不可迭代的报错。
尝试过的完整代码:
import csv from statistics import mean with open("E:\Chapter5\input_file_name.csv") as inputi: data_list=[] score_list=[] mean_list=[] reader=csv.reader(inputi) for rows in reader: data_list.append(rows) #print(len(data_list)) for i in range(0,len(data_list)): score_list.append(data_list[i][1:]) #print(score_list) new_list=[ [float(x) for x in nested_lists] for nested_lists in score_list ] #print(new_list) for items in new_list: mean_list.append(mean(items)) #print(mean_list) least_scores=sorted(mean_list) least_scores=least_scores[0:3] print(least_scores) with open("E:\Chapter5\output_file_name.csv",'w',newline='') as outi: writer=csv.writer(outi) writer.writerow(least_scores)
以及引发报错的修改代码:
with open("E:\Chapter5\output_file_name.csv",'w',newline='') as outi: writer=csv.writer(outi) for nums in least_scores: writer.writerows(nums)
解决方法
错误原因
writer.writerow(row):接受可迭代对象,将对象内的每个元素作为同一行的不同列写入,直接传least_scores会把三个浮点数放在同一行的三列。writer.writerows(rows):接受包含多个可迭代对象的列表,每个可迭代对象对应一行。浮点数不是可迭代对象,直接传入会触发报错。
正确实现方式
以下三种方法都能满足需求:
方法1:循环调用writer.writerow,包装单元素列表
with open("E:\Chapter5\output_file_name.csv",'w',newline='') as outi: writer = csv.writer(outi) for num in least_scores: writer.writerow([num]) # 将单个浮点数转为单元素列表,作为一行写入
方法2:用writer.writerows传入二维列表
with open("E:\Chapter5\output_file_name.csv",'w',newline='') as outi: writer = csv.writer(outi) # 生成包含单元素子列表的二维结构,每个子列表对应一行 writer.writerows([[num] for num in least_scores])
方法3:直接文件写入(无需csv模块)
如果需求仅为每行写入一个数值,可跳过csv模块,直接写入文件:
with open("E:\Chapter5\output_file_name.csv",'w') as outi: for num in least_scores: outi.write(f"{num}\n")
内容的提问来源于stack exchange,提问作者Annahita
相关产品推荐
相关产品推荐

