Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 创建新文件时出现问题_Python_File - Fatal编程技术网

Python 创建新文件时出现问题

Python 创建新文件时出现问题,python,file,Python,File,我正试图在程序末尾创建一个新文件以将信息附加到其中,但是由于某种原因没有创建该文件(我的代码中要查看的地方是#曲线区域)。我最好的猜测是,在程序开始时建立的变量“filename”并没有一直传递到我建立新文件名的地方。我的代码如下: import statistics # input filename = input("Enter a class to grade: ") try: # open file name open(filename+".txt", "r")

我正试图在程序末尾创建一个新文件以将信息附加到其中,但是由于某种原因没有创建该文件(我的代码中要查看的地方是#曲线区域)。我最好的猜测是,在程序开始时建立的变量“filename”并没有一直传递到我建立新文件名的地方。我的代码如下:

import statistics

# input
filename = input("Enter a class to grade: ")

try:
    # open file name
    open(filename+".txt", "r")
    print("Succesfully opened", filename,".txt", sep='')
    print("**** ANALYZING ****")
    with open(filename+".txt", 'r') as f:
        counter1 = 0
        counter2 = 0
        right = 0
        answerkey = "B,A,D,D,C,B,D,A,C,C,D,B,A,B,A,C,B,D,A,C,A,A,B,D,D"
        a = []
        # validating files
        for line in f:
            if len(line.split(',')) !=26:
                print("Invalid line of data: does not contain exactly 26 values:")
                print(line)
                counter2 += 1
                counter1 -= 1
            if line.split(",")[0][1:9].isdigit() != True:
                print("Invalid line of data: wrong N#:")
                print(line)
                counter2 += 1
                counter1 -= 1
            if len(line.split(",")[0]) != 9:
                print("Invalid line of data: wrong N#:")
                print(line)
                counter2 += 1
                counter1 -= 1
            counter1 += 1
        #grading students
            score = len(([x for x in zip(answerkey.split(","), line.split(",")[1:]) if x[0] != x[1]]))
            score1 = 26 - score
            score2 = score1 / 26
            score3 = score2 * 100
            a.append(score3)
            sscore3 = str(score3)

            # results file
            results = open(filename+"_grades.txt", "a")
            results.write(line.split(",")[0])
            results.write(",")
            results.write(sscore3[:2])
            results.write("\n")
            results.close()
        # in case of no errors
        if counter2 == 0:
            print("No errors found!")
        # calculating 
        number = len(a)
        sum1 = sum(a)
        max1 = max(a)
        min1 = min(a)
        range1 = max1 - min1
        av = sum1/number

        # turn to int
        av1 = int(av)
        max2 = int(max1)
        min2 = int(min1)
        range2 = int(range1)

        # median
        sort1 = sorted(a)
        number2 = number / 2
        number2i = int(number2)
        median = a[number2i]
        median1 = int(median)

        # mode
        from statistics import mode
        mode = mode(sort1)
        imode = int(mode)



    # printing
    print ("**** REPORT ****")
    print ("Total valid lines of data:", counter1)
    print ("Total invalid lines of data:", counter2)

    print ("Mean (average) score:", av1)
    print ("Highest score:", max2)
    print("Lowest score:", min2)
    print("Range of scores:", range2)
    print("Median Score:", median1)
    print("Mode score(s):", imode)
    # curve
    part = input("Would you like to apply a curve to the scores? (y)es or (n)o?")
    if part == "y":
        newmean = input("Enter desired mean score:")
        part1 = newmean - av1
        part2 = sscore3 + part1
        results = open(filename+"_grades_with_curve.txt", "a")
        results.write(line.split(",")[0])
        results.write(",")
        results.write(sscore3[:2])
        results.write(",")
        results.write(part2)
        results.write("\n")
        results.close()





except:
    print("File cannot be found.")

当我在末尾输入“y”尝试创建新列表时,它会跳转到except块,这意味着问题就在创建新列表的过程中

代码太长,需要重新组织

很可能,您的代码还存在其他问题,您试图修复错误的问题

几点提示:

在未将文件对象指定给变量的情况下,请勿打开文件 您打开了文件,但没有机会关闭它,因为您忽略了返回的文件 文件对象

使用
块打开/关闭文件
学习在任何地方这样做

不重新打开文件以写入结果 代码重复打开结果文件(在“a”模式下)。你最好只打开一次

您甚至可以在一个上下文块中打开多个文件:

with open(input_fname, 'r') as f, open(output_fname, "a") as results:
    # work with the files
重复使用一次计算结果 在许多地方,您拆分行:
line.split(“,”)

您应将结果放入变量并重新使用

rec = line.split(",")
永远不要忽略例外!!!(最严重的问题) 最后一个块是捕获所有异常,而不给您任何迹象,什么地方出了问题(甚至是错误) 更糟糕的是,它告诉您可能是错误的信息(文件未找到)

因此,不是:

try:
    # some code
except:
    print("File not found.")
至少重新引发异常以从中学习:

try:
    # some code
except:
    print("File not found.")  # this is probably to be removed as misleading message
    raise
事实上,您可以完全忽略完整的顶级try-except块,让异常显示出来 告诉你出了什么问题

将代码分成更小的块。
将代码拆分为更小的函数将简化调试和使用

代码太长,需要重新组织

很可能,您的代码还存在其他问题,您试图修复错误的问题

几点提示:

在未将文件对象指定给变量的情况下,请勿打开文件 您打开了文件,但没有机会关闭它,因为您忽略了返回的文件 文件对象

使用
块打开/关闭文件
学习在任何地方这样做

不重新打开文件以写入结果 代码重复打开结果文件(在“a”模式下)。你最好只打开一次

您甚至可以在一个上下文块中打开多个文件:

with open(input_fname, 'r') as f, open(output_fname, "a") as results:
    # work with the files
重复使用一次计算结果 在许多地方,您拆分行:
line.split(“,”)

您应将结果放入变量并重新使用

rec = line.split(",")
永远不要忽略例外!!!(最严重的问题) 最后一个块是捕获所有异常,而不给您任何迹象,什么地方出了问题(甚至是错误) 更糟糕的是,它告诉您可能是错误的信息(文件未找到)

因此,不是:

try:
    # some code
except:
    print("File not found.")
至少重新引发异常以从中学习:

try:
    # some code
except:
    print("File not found.")  # this is probably to be removed as misleading message
    raise
事实上,您可以完全忽略完整的顶级try-except块,让异常显示出来 告诉你出了什么问题

将代码分成更小的块。
将代码拆分为更小的函数将简化调试和使用

它打印出的异常是什么?您是否尝试过在结果行附近执行
打印文件名
以查看发生了什么?如果不使用files@leekaiinthesky“找不到文件”。@SaicharanSM我将把“a+”放在哪里?在最后的
打印后再添加一行(“找不到文件”)
和简单的
提升
(具有相同的缩进级别)。很有可能,您的代码中有一些错误,它会进入
中,但
除外,在那里它会被悄悄忽略,并以打印消息误导您。可能会看到的堆栈跟踪将告诉您出了什么问题。它打印出的异常是什么?您是否尝试过在结果行附近执行
打印文件名
以查看发生了什么?如果不使用files@leekaiinthesky“找不到文件”。@SaicharanSM我将把“a+”放在哪里?在最后的
打印后再添加一行(“找不到文件”)
和简单的
提升
(具有相同的缩进级别)。很有可能,您的代码中有一些错误,它会进入
中,但
除外,在那里它会被悄悄忽略,并以打印消息误导您。很可能看到的堆栈跟踪将告诉您出了什么问题。