You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python使用csv.DictReader统计CSV摄像头数量时循环提前终止问题

问题分析与解决方案

核心问题:提前返回导致循环中断

你代码里的第二个for循环刚执行第一次就触发了return,函数直接终止,根本没遍历完所有地区,所以只返回了第一个Kommun的统计结果。

修正步骤

  1. 移除循环内的return,收集所有结果
    不要在遍历字典的循环里直接return,而是把每个地区的统计字符串存到列表中,最后拼接成完整内容返回,或者直接在函数内完成输出。

  2. 修复文件编码问题
    打开CSV时指定encoding='utf-8',避免像Vänersborg这类特殊字符乱码。

  3. 添加总摄像头数量统计
    用sum(cameras.values())可以快速算出所有摄像头的总数,匹配目标输出要求。

  4. 优化输出格式对齐
    用字符串格式化的对齐功能(比如{:<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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 16:06:28