Python遍历CSV统计词频时字典更新报错:'NoneType'无update属性
解决CSV文件词汇统计的字典合并问题
问题分析
你的代码存在两个核心问题:
- 字典更新逻辑错误:
dict_napak_dir = dict_napak_dir.update(dict_napak_file)这行代码会触发报错。因为字典的update()方法是原地修改字典,返回值为None。第一次执行后dict_napak_dir会被赋值为None,后续循环调用update()时就会触发AttributeError。 - 词汇计数未正确累加:直接用
dict_napak_file.update(counts)合并单文件计数时,若多个文件有相同词汇,会直接覆盖之前的计数而非累加;同时你对中间字典的处理逻辑混乱,导致无法实现全局统计。
修复步骤
- 移除错误的赋值语句:直接调用
dict_napak_dir.update(...),不要将返回值赋值给原字典。 - 调整计数累加逻辑:遍历每个文件的词汇计数,手动累加至总字典,避免覆盖问题。
- 修正路径字符串:
root = D:\dir1\dir2\data需要用引号包裹,否则会被当作变量而非字符串路径。
修复后的完整代码
import os import pandas as pd # 路径用引号包裹,避免语法错误,r前缀防止转义字符问题 root = r'D:\dir1\dir2\data' ext = '.csv' # 全局总统计字典 dict_napak_dir = {} for datoteka in os.scandir(root): if datoteka.path.endswith(ext): df = pd.read_csv(datoteka, encoding='cp1252') fifth_column = df.iloc[:, 4] # 取第5列(索引从0开始) counts = fifth_column.value_counts() # 遍历当前文件的词汇计数,累加至总字典 for word, count in counts.items(): if word in dict_napak_dir: dict_napak_dir[word] += count else: dict_napak_dir[word] = count print("done") # 打印总统计结果 print(dict_napak_dir)
补充说明
- 如果需要保留每个文件的单独统计,可以在循环内创建临时字典,处理完文件后将其存入列表(比如
file_counts_list.append(temp_dict)),或用文件名作为键存入另一个字典。 - 若想简化代码,也可以用
collections.defaultdict来自动处理键不存在的情况,减少判断逻辑。
内容的提问来源于stack exchange,提问作者CH4
相关产品推荐
相关产品推荐

