Python处理CSV攻击数据时调用count函数出现NameError求助
问题分析与解决
错误根源
你遇到的NameError是因为代码里的Adware(包括前两个案例里的BENIGN、ransomware)根本没被定义成变量。前两个文件能运行完全是巧合——大概率你之前的代码里不小心创建了同名变量,并非正确的文件读取逻辑。
正确的处理方式
不管是哪种CSV文件,都需要先读取文件内容,再进行统计。下面提供两种可行方案:
方案1:直接读取文件内容统计
如果你的CSV文件里整行都是攻击类型(或者目标字符串分散在文件中),可以先读取文件的全部内容,再调用count():
# 处理Adware.csv的示例 file_path = "/content/drive/MyDrive/Colab Notebooks/Adware.csv" with open(file_path, 'r') as file: file_content = file.read() incidents3 = file_content.count('ADWARE') print('Number of Adware incidents:', incidents3)
- 用
with语句打开文件是Python的最佳实践,它会自动帮你关闭文件,避免资源泄漏。 - 先把文件内容读到
file_content变量里,再对这个变量调用count()。
方案2:用csv模块规范处理(更适合结构化CSV)
如果你的CSV是标准结构化格式(比如攻击类型在某一列,比如列名是Attack_Type),用csv模块更准确,不会统计到其他列里的同名字符串:
import csv file_path = "/content/drive/MyDrive/Colab Notebooks/Adware.csv" incident_count = 0 with open(file_path, 'r') as file: reader = csv.DictReader(file) for row in reader: # 假设攻击类型在名为'Attack_Type'的列,根据你的实际列名修改 if row['Attack_Type'] == 'ADWARE': incident_count +=1 print('Number of Adware incidents:', incident_count)
- 这种方法会逐行读取CSV,精准统计目标列的攻击类型数量,避免误统计。
统一优化所有文件的统计逻辑
你可以把统计逻辑封装成函数,避免重复代码:
import csv def count_attack_incidents(file_path, target_type, column_name='Attack_Type'): count = 0 with open(file_path, 'r') as file: reader = csv.DictReader(file) for row in reader: if row[column_name] == target_type: count +=1 return count # 调用函数统计各个文件 benign_count = count_attack_incidents("/content/drive/MyDrive/Colab Notebooks/Benign.csv", 'BENIGN') ransomware_count = count_attack_incidents("/content/drive/MyDrive/Colab Notebooks/Ransomware.csv", 'RANSOMWARE') adware_count = count_attack_incidents("/content/drive/MyDrive/Colab Notebooks/Adware.csv", 'ADWARE') print(f'Number of Benign incidents: {benign_count}') print(f'Number of Ransomware incidents: {ransomware_count}') print(f'Number of Adware incidents: {adware_count}')
内容的提问来源于stack exchange,提问作者Ali
相关产品推荐
相关产品推荐

