写文件时出错

时间:2016-05-26 23:59:27

标签: python file sorting

我希望我的功能可以对数据进行排序并将其打印到用户选择的文件中。这是我的代码。它不是打印信息,而是在文件中打印“无”。它应该打印到的文件应该是用户选择的文件,而是打印到调用write_sorted_data的文件中。我的代码导致了什么问题?

options_functions = {'i':student_lab_average,
       'ii':student_prog_average,
       'iii':mid_average,
       'iv': overall_grade,
       'v':weighted_total_score
             }
options_strings = {'i':'lab average',
       'ii':'program average',
       'iii':'midterm average',
       'iv': 'final grade',
       'v':'weighted total score'
                 }

def sorted_data(student_scores):

    print("This option is for sorting students data and printing in a   file")
    print("(i) lab average, (ii) program average, (iii) midterm average, (iv) final, (v) weighted total score")

    user_sorted_data=input("Select one of the options (i-v):")

    write_sorted_file=input("What file would you like this written into?")

    print("You have selected sorting student data upon      "+options_strings[user_sorted_data])
    f=open('write_sorted_file','w')
    f.write(str(options_functions[user_sorted_data](student_scores)))
    f.close()

这就是我调用函数的方式

elif(ch== 'e'):
    print(" ")
    student_name=input("Type the student's last name:")
    print(" ")
    scores= get_data_for_student(student_name,mid1,mid2,final,homework,labs,program1,program2,program3,participation)
    f=open('write_sorted_file', 'w')
    print(" ")
    f.write(str(sorted_data(scores))) 
    print("Your file has been written.")
    f.close()

2 个答案:

答案 0 :(得分:2)

问题1:

您将None写入文件的原因是您正在编写函数sorted_data的输出。 sorted_data()没有return语句,因此默认返回None

问题2:

您目前正在写一个名为' write_sorted_file'如下所示:

f=open('write_sorted_file','w')

如果您要写入您在变量write_sorted_file中指定的文件,那么您可能希望删除这些单引号:

f=open(write_sorted_file,'w')

其他问题:

但是,有了这两个问题,您的代码似乎仍然可以通过您想要的方式完成。例如,您的代码中没有任何地方可以对任何内容进行排序。此外,您正在写入主函数和您定义的函数sorted_data中的文件。我非常确定这不是您打算做的事情。

答案 1 :(得分:0)

函数return中没有sorted_data(student_scores)语句,因此它将返回隐式返回值None

首先写入sorted_data(student_scores)函数中的文件。然后再次向同一文件写入函数的返回类型。由于上述原因,这是None

因此,写入该文件的最后一项(结束)是该函数的返回类型,即None,因为您没有打开附加“a”的文件。所以None是文件的结束状态内容。

即使函数具有返回值,也不建议使用双写(在函数内,然后写入其返回值)。设计太容易出错了。

此外,如果您希望写入的文件是用户定义的,请在打开时使用表示输出文件的用户定义名称的变量,即write_sorted_file,而不是引号中静态定义的文件名'write_sorted_file'