在不使用熊猫的情况下,如何分析CSV数据并仅从CSV文件的某些列和行中提取某些值?

时间:2019-03-23 00:28:03

标签: python

我正在编写一个程序,提取汽车的最低和最高MPG额定值。汽车的信息存储在CSV文件中。我相信我编写了正确的最小/最大函数,但是,就像在所有行/列中循环一样,我也写了它。

我们只应包括某些类别的汽车以进行数据提取。汽车的类别是CSV数据的第一列,其索引为[0]。我要遍历的MPG等级在第10列,索引为[9]。

我们不应在最小/最大MPG计算中包括“货车”,“小型货车”或“卡车”类别。有没有一种方法可以基于这些字符串进行排除,并循环遍历未排除的其余MPG?

最后,一旦完成,就应该将这些结果写入新文件。有什么办法可以打开正在写入的文件,以检查我的代码是否有效?

当我尝试打印新创建的文件的内容时(基于用户输入),我收到一条错误消息,指出该文件不在目录中。任何帮助将不胜感激。

注意:我们不允许进口熊猫。

当前代码

print("Welcome to EPA Mileage Calculator")
yearChoice = int(input("What year would you like to view data for? (2008 or 2009): "))
while yearChoice != 2008 and yearChoice != 2009:
    print("Invalid input, please try again")
    yearChoice = int(input("What year would you like to view data for? (2008 or 2009): "))
saveResults = input("Enter the filename to to save results to: ")

if yearChoice == 2008:
    fileIn = open("epaVehicleData2008.csv", "r")
    fileIn.readline()
    minMPG, maxMPG = [], []
    for line in fileIn:
        line = line.strip()
        dataList = line.split(",")
        minMPG.append(line[9])
    print(min(minMPG))
    print(max(maxMPG))

if yearChoice == 2009:
    fileIn = open("epaVehicleData2009.csv", "r")
    fileIn.readline()
    minMPG, maxMPG = [], []
    for line in fileIn:
        line = line.strip()
        dataList = line.split(",")
        minMPG.append(line[9])
    print(min(minMPG))
    print(max(maxMPG))

fileIn = open(saveResults, "r")
for line in fileIn:
    print(line)

1 个答案:

答案 0 :(得分:1)

首先,您在代码的两个位置都有这样的错误:

line = line.strip()
dataList = line.split(",")
minMPG.append(line[9])

在第三行中,您将获得值line[9]。那是该行索引9处的字符,而不是列表索引9处的值。改为使用minMPG.append(dataList[9])

接下来,您可以使用if语句检查车辆类型不在特定组中。像

if dataList[9] not in ['van', 'truck', 'minivan']:
    minMPG.append(dataList[9])

对于最后一个问题,您尚未在saveResults中保存任何内容,也没有创建文件,因此在尝试读取文件时出现错误是很有意义的。关于如何做到这一点有很多疑问和答案。查看其中一些内容,然后问一个单独的问题,如果您无法使代码正常工作。