Python I';我在制作一个函数来告诉我一个CSV文件中发生了多少次地震时遇到了麻烦

Python I';我在制作一个函数来告诉我一个CSV文件中发生了多少次地震时遇到了麻烦,python,csv,Python,Csv,在我的CompSci作业中,我得到了一个CSV文件,我应该创建代码来打印文件中报告的地震数量。CSV的第一行是标题,后面是13行数据。因此,我知道有13次地震。我的问题是,在第七行中,我不断得到一个索引超出范围的错误 Traceback (most recent call last): File "D:\Thonny\Files\march25.py", line 7, in <module> while lineBeingRead[disasterType] != "e

在我的CompSci作业中,我得到了一个CSV文件,我应该创建代码来打印文件中报告的地震数量。CSV的第一行是标题,后面是13行数据。因此,我知道有13次地震。我的问题是,在第七行中,我不断得到一个索引超出范围的错误

Traceback (most recent call last):
  File "D:\Thonny\Files\march25.py", line 7, in <module>
    while lineBeingRead[disasterType] != "earthquake":
IndexError: list index out of range
这是我的代码(注意:尚未完成)

我的主要问题是为什么我会出现这个错误,我能做些什么来修复它。其次,如何在while循环中实现if/else语句。我想说的是,如果该列发生地震,将其添加到地震总数中,然后移到下一行。如果没有,请在列中添加一个,然后重试。

让我们尝试使用from
csv
模块:

earthquakes = 0
with open('earthquakes.csv', 'r') as file:
    reader = csv.DictReader(file)
    for dct in reader:
        if dct['type'].lower() == 'earthquake':
            earthquakes += 1


这将打开文件,遍历行,并根据“地震”是否在该行返回
True
False
sum
ming该序列将
True
视为1,将
False
视为0。简而言之,计算包含“地震”的行数。

在问题中以正确格式的文本显示完整的回溯。您的csv文件是什么样子的?你能提供一个样本吗?@MichaelButscher刚刚做了这些changes@ShubhamSharma只是做了那些改变!问题是,您的循环不知道您何时在文件末尾,因此当它读取最后一行时,它会继续运行,并再次调用
next()
,导致一个空列表,这就是错误发生的地方。噢,谢谢!我甚至没有想到这一点。我有点痴迷于使用我们刚刚学到的CSV文件并与它们交互,我忘记了我可以使用我们几个月前学到的那些功能:DHmmm。。如果我是老师,我不确定我是否会认为这是正确的。显然,应检查列
类型
,以确定字符串“地震”。如果它包含“非地震”,或者后来在csv文件的更新中添加了额外数据(可能是一列,其中包含对非地震行中“地震地图”的引用),该怎么办。无论如何,如果没有检查类型列,至少可以检查
“,地震,
。(我不懂Python,所以我自己无法提供解决方案)@Danny\ds我已经编辑了答案。@ShubhamSharma+now!:)
import csv
with open("earthquakes.csv", "r") as inFile:
    csvReader = csv.reader(inFile)
    lineBeingRead = next(csvReader)
    earthquakes = 0 #will be used for the final print value
    column = 0 #each line has a value called type, which is referred to as earthquake
    while lineBeingRead[column] != "earthquake": 
        column = column + 1
        if column == "earthquake":
            lineBeingRead = next(csvReader)
            earthquakes = earthquakes
        #else
        #print
earthquakes = 0
with open('earthquakes.csv', 'r') as file:
    reader = csv.DictReader(file)
    for dct in reader:
        if dct['type'].lower() == 'earthquake':
            earthquakes += 1
>>> earthquakes

13
print(sum("earthquake" in line
      for line in open("earthquakes.csv", "r"))