为何Python读取CSV字段后数字的每个字符单独打印而非显示完整数值
问题原因
你代码中for x in row['numbers']的写法是直接对字符串类型的row['numbers']做迭代,Python中字符串属于可迭代对象,迭代时默认返回单个字符,这就是你看到逐字符打印的核心原因,和能不能转float没有关联。
常见疑问解答
- 如果你把当前逐字符遍历得到的内容插入列表,确实会保持拆分状态,列表里会存储单个的字符元素。
- 带小数点的数字字符串、
NaN字符串都可以直接转换为float类型,Python的float原生支持nan值,不需要额外处理格式。
解决方法
根据你的row['numbers']存储规则二选一即可:
- 如果
row['numbers']本身只存单个数值,直接删除循环即可,直接读取row['numbers']就能拿到完整的数值:
# 不需要for循环遍历 print(row['numbers']) # 转float写法 num_val = float(row['numbers'])
- 如果
row['numbers']存的是多个用固定符号分隔的数值,先按分隔符拆分再遍历:
import csv import math with open('file.csv','w') as file: with open('file2.csv', 'r') as file2: reader = csv.DictReader(file2) # 写表头,原代码的join(row)逻辑错误,替换为读表头字段 file.write(','.join(reader.fieldnames) + '\n') for num,row in enumerate(reader): outrow = [] # 示例为用分号分隔,替换为你实际的分隔符即可 for num_str in row['numbers'].split(';'): num_val = float(num_str) print(num_val) # 处理NaN的逻辑,示例为替换为0,可按需修改 if math.isnan(num_val): num_val = 0 outrow.append(str(num_val)) # 后续写outrow到文件的逻辑可自行补充
内容的提问来源于stack exchange,提问作者llama
相关产品推荐
相关产品推荐

