Python使用csv.DictReader统计CSV摄像头数量时循环提前终止问题
问题分析与解决方案
核心问题:提前返回导致循环中断
你代码里的第二个for循环刚执行第一次就触发了return,函数直接终止,根本没遍历完所有地区,所以只返回了第一个Kommun的统计结果。
修正步骤
移除循环内的return,收集所有结果
不要在遍历字典的循环里直接return,而是把每个地区的统计字符串存到列表中,最后拼接成完整内容返回,或者直接在函数内完成输出。修复文件编码问题
打开CSV时指定encoding='utf-8',避免像Vänersborg这类特殊字符乱码。添加总摄像头数量统计
用sum(cameras.values())可以快速算出所有摄像头的总数,匹配目标输出要求。优化输出格式对齐
用字符串格式化的对齐功能(比如{:<15}左对齐15个字符),让输出列更整齐。
修正后的完整代码
import csv def nr_cameras(location_data): cameras = {} # 打开文件时指定utf-8编码,解决特殊字符乱码 with open(location_data, 'r', encoding='utf-8') as p: csv_reader = csv.DictReader(p, delimiter=';') for row in csv_reader: kommun = row['Kommun'] cameras[kommun] = cameras.get(kommun, 0) + 1 # 组装输出内容 output_lines = [] output_lines.append('Kommun Nr of cameras') output_lines.append('---------------------------') # 按地区名称排序输出(可选,让结果更有序) for kommun, count in sorted(cameras.items()): # 左对齐地区名,右对齐数量,保证格式整齐 output_lines.append(f"{kommun:<15} {count:>3}") output_lines.append('---------------------------') total_cameras = sum(cameras.values()) output_lines.append(f"There is a total of {total_cameras} cameras.") return '\n'.join(output_lines) # 调用函数并打印完整结果 result = nr_cameras('locationData.csv') print(result)
额外说明
- 排序部分:
sorted(cameras.items())会按地区名称的字母顺序排序输出,不需要的话可以直接用cameras.items()遍历。 - 格式对齐:
{kommun:<15}确保地区名占15个字符宽度且左对齐,{count:>3}让数量右对齐,和目标输出的排版一致。
内容的提问来源于stack exchange,提问作者Zrocks2000
相关产品推荐
相关产品推荐

