从一个文件中获取数据,更改它,然后使用python将其重写为新文件

时间:2015-03-15 19:37:39

标签: python file

所以我对python有些新意,我正在尝试编写一个程序,将数字等级放在一个文件中,并将它们更改为字母等级。我也试图在不使用"和#34;或套装。这就是我到目前为止所拥有的

def main():

    #read the file
    name = "grades.dat"
    file = open(name,'r')

    for line in file:
        read_file_contents = file.readline()
        grade_change(read_file_contents)
    file.close()    
    write_file_name = name + "_out"
    write_file = open(write_file_name, 'w')
    write_file.write(read_file_contents)

    write_file.close()


def grade_change(grade):
    float(grade)
    if grade>90:
        return "A"
    elif grade>80:
        return "B"
    elif grade>70:
        return "C"
    elif grade>60:
        return "D"
    elif grade>0:
        return "F"

main()

2 个答案:

答案 0 :(得分:0)

这将只写出输入文件的第一行。您应该附加到包含每个输出字母等级的列表,然后在结尾处将每个等级写出到out文件。

答案 1 :(得分:0)

在你的函数中,你需要将grade = float(grade)设置为实际将等级转换为浮点并将等级重新分配给结果,最简单的方法是循环遍历文件对象并在将其传递给函数时进行转换然后打开输出文件并写入:

name = "grades.dat"
def grade_change(grade):
    if grade > 90:
        return "A"
    elif grade > 80:
        return "B"
    elif grade > 70:
        return "C"
    elif grade > 60:
        return "D"
    else:
        return "F"

with open(name) as f:
    # pass each grade to your function cast to a float
    changed = (grade_change(float(grde)) for grde in f)

with open(write_file_name, "w") as out:
    # iterate over each grade in changed and write adding a newline char
    for gde in changed:
        out.write("{}\n".format(ged))

您可以在不使用with的情况下执行相同的操作,但使用with是在python中打开文件的惯用方法。  我认为如果等级不是来自A-E,它必须是F,所以我们只需要一个别的。

如果你的文件实际上是一行或由空格分隔的数据行,那么你需要拆分成单个元素,如下所示,如果分隔符是逗号等等,那么将逗号传递给分割,你将还需要确定您是希望每个等级是单线还是等级:

with open(name) as f:
    changed = (grade_change(gde) for line in f for gde in line.split())