Python将字典内带千分位逗号的字符串列表转整数求和导出CSV
解决方案
你写的count_doses_by_date存在两个核心问题,对应修正方式如下:
- 函数本身设计为接收
main生成的日期-剂量字典作为入参,不需要在函数内部重复实现CSV读取、字典构建逻辑,这部分冗余代码可以直接删除,直接处理传入的字典即可。 - 千分位逗号导致整数转换失败的问题不会破坏CSV结构:
csv.reader已经按照CSV的分隔规则完成了字段拆分,你拿到的每个值都是独立字段,字符串内部的逗号全是数值自带的千分位分隔符,直接替换为空字符串后再转整数就可以正常计算。
修正后的完整实现
def count_doses_by_date(dict_dose_by_date): import csv # 直接处理传入的字典,写入结果文件 with open('doses.csv', 'w', newline='') as out: writer = csv.writer(out) # 写入输出文件表头 writer.writerow(['date', 'total_doses']) for date, dose_str_list in dict_dose_by_date.items(): # 移除数值内的千分位逗号后转整数,再求和 dose_int_list = [int(s.replace(',', '')) for s in dose_str_list] total_doses = sum(dose_int_list) # 逐行写入统计结果 writer.writerow([date, total_doses])
配套调整main函数
原main函数中冗余打开了输出文件,可以直接去掉,处理逻辑放在统计函数中执行即可:
def main(): import csv dict_doses_by_date = {} filename_input = str(input("Please enter a .csv file to read: ")) with open(filename_input, "r") as inp: header = inp.readline() reader = csv.reader(inp, delimiter=",", quotechar='"') for line in reader: dict_doses_by_date[line[0]] = line[1:6] # 传入结构化字典调用统计函数 count_doses_by_date(dict_doses_by_date) return dict_doses_by_date
说明:使用标准库
csv.writer写输出文件比手动拼接字符串更稳妥,会自动处理特殊字符转义,避免输出格式不符合CSV规范。打开文件时加newline=''参数是Python官方推荐的CSV文件读写写法,可以避免不同操作系统下出现多余空行。
内容的提问来源于stack exchange,提问作者eshtabel3asal
相关产品推荐
相关产品推荐

