我被我的 python csv 作业困住了

Posted

技术标签:

【中文标题】我被我的 python csv 作业困住了【英文标题】:I'm stuck with my python csv homework 【发布时间】:2017-09-26 20:19:28 【问题描述】:

当我第一次运行代码时,它会起作用。当我第二次运行它时,它无法找到 csv 文件,直到我替换它。我不知道这是为什么。

我还想把最快的时间排在最前面。

    def read_class_data():
    import csv
    driver=[]
    team=[]
    input_file = open("E:\Advanced Higher Computing\Racing.csv","r")
    data = csv.reader(input_file)
    print ("driver: ", driver)
    for eachline in data:
        driver.append(eachline[0])
        team.append(eachline[1])
    input_file.close()
    return driver, team

def register():
    time=[]*6
    for i in range(6):
        temptime = float(input("What is your best time?"))
        while temptime < 0:
            print("Time cannot be less than 0.")
            temptime = float(input("What is your best time?"))
        time.append(temptime)
    return time

def write_class_data(dr, tm, time):
    import csv
    output_file = open("E:\Advanced Higher Computing\Racing.csv","w")
    data = csv.writer(output_file)
    for i in range(len(time)):
        data.writerow([dr[i], tm[i], time[i]])
    output_file.close()

dr, tm = read_class_data()
time = register()
write_class_data(dr, tm, time)

【问题讨论】:

错误信息包含行号。您可以考虑将其添加到您的问题中。 如果没有实际的错误消息和行号,我们将无能为力,除非您实际提供 Minimal, Complete, and Verifiable example。 好点 - 抱歉。现已添加 - 谢谢! 我正在尝试从 csv 文件中获取驱动程序和团队的名称,并且我正在尝试允许用户将时间写入 csv 文件。 driver=[]*6 之后,执行print driver 并查看您创建的内容。您不能获取空列表的索引。 【参考方案1】:

你的代码有很多问题,但我们只看第一个函数

def read_class_data():
    import csv
    driver=[]*6
    teams=[]*6
    input_file = open("E:\Advanced Higher Computing\Racing.csv","r")
    data = csv.reader(input_file)
    loop = 1
    for eachline in data:
        driver[loop] = eachline[0]
        team[loop] = eachline[1]
        loop = loop + 1
        inputfile.close
    return driver, teams

首先,

driver =[]*6

并不像你认为的那样做。它创建一个空数组,即长度为零的数组。

这实际上是你得到错误的地方。在第一次通过循环时,loop 的值为 1,而您正在尝试分配给 driver[1] ... 它不存在,因为 len(driver) == 0

接下来,将loop 设置为 1 表明您认为 Python 列表索引是基于 1 的。它们不是:Python 使用从零开始的索引。

你需要 append 到一个列表来添加新数据,所以你的循环可能看起来更像

for eachline in data:
    driver.append(eachline[0])
    team.append(eachline[1])

接下来,您在循环中调用了inputfile.close。您实际上没有调用它,因为您没有所需的括号。应该是inputfile.close()

但如果是这样,您的循环将在第二遍时崩溃,因为该文件已在前一遍中关闭。您需要将该行移出循环。

最后,无论如何你都应该使用上下文管理器(即with),所以函数最终会像

def read_class_data():
    import csv
    driver = []
    teams = []

    with open("E:\Advanced Higher Computing\Racing.csv","r") as input_file:
        data = csv.reader(input_file)

        for eachline in data:
            driver.append(eachline[0])
            team.append(eachline[1])

    return driver, teams

【讨论】:

这看起来不错,但我的程序仍然有同样的错误。我一直在尝试将这种风格的代码应用到我的程序的其余部分仍然无法正常工作。

以上是关于我被我的 python csv 作业困住了的主要内容,如果未能解决你的问题,请参考以下文章

我被字符串和数组困住了

更正众筹网站中的 PayPal 自适应支付流程。我被困住了

我被这个错误困住了。当我按照所有步骤在heroku上部署角度应用程序时

用户警告:Pandas 不允许通过新属性名称创建列

IOS中的Afnetworking抛出错误

通过 SQL Pivot 将“NULL”值替换为“0”