删除从fi读取的列表中的换行符

2024-04-19 11:35:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个简单的程序,它获取一个ID号并打印与该ID匹配的人的信息。该信息存储在一个.dat文件中,每行一个ID号。

问题是,我的程序也正在从文件中读取换行符。我试过“name.split()方法,但这似乎对列表不起作用。

我的程序:

from time import localtime, strftime

files = open("grades.dat")
request = open("requests.dat", "w")
lists = files.readlines()
grades = []

for i in range(len(lists)):
    grades.append(lists[i].split(","))

cont = "y"

while cont == "y" or cont == "Y":
    answer = raw_input("Please enter the Student I.D. of whom you are looking: ")
    for i in range(len(grades)):
        if answer == grades[i][0]:
            print grades[i][1] + ", " + grades[i][2] + (" "*6) + grades[i][0] + (" "*6) + grades[i][3]
            time = strftime("%a, %b %d %Y %H:%M:%S", localtime())
            print time
            print "Exams - " + grades[i][11] + ", " + grades[i][12] + ", " + grades[i][13]
            print "Homework - " + grades[i][4] + ", " + grades[i][5] + ", " + grades[i][6] + ", " + grades[i][7] + ", " +grades[i][8] + ", " + grades[i][9] + ", " + grades[i][10]
            total = int(grades[i][4]) + int(grades[i][5]) + int(grades[i][6]) + int(grades[i][7]) + int(grades[i][8]) + int(grades[i][9]) + int(grades[i][10]) + int(grades[i][11]) + int(grades[i][12]) + int(grades[i][13])
            print "Total points earned - " + str(total)
            grade = float(total) / 550
            grade = grade * 100
            if grade >= 90:
                print "Grade: " + str(grade) + ", that is equal to an A."
            elif grade >= 80 and grade < 90:
                print "Grade: " + str('%.2f' %grade) + ", that is equal to a B."
            elif grade >= 70 and grade < 80:
                print "Grade: " + str('%.2f' %grade) + ", that is equal to a C."
            elif grade >= 60 and grade < 70:
                print "Grade: " + str('%.2f' %grade) + ", that is equal to a D."
            else:
                print "Grade: " + str('%.2f' %grade) + ", that is equal to an F."
            request.write(grades[i][0] + " " + grades[i][1] + ", " + grades [i][2] +
                          " " + time)
            request.write("\n")


    print
    cont = raw_input("Would you like to search again? ")

if cont != "y" or cont != "Y":
    print "Goodbye."

Tags: to程序idthattimeisequaldat
3条回答

您可以使用strip()函数删除尾随(和前导)空格;传递参数将允许您指定哪些空格:

for i in range(len(lists)):
    grades.append(lists[i].strip('\n'))

不过,看起来您可以简化整个块,因为如果您的文件每行存储一个ID,那么grades只是lists去掉了换行符:

之前
lists = files.readlines()
grades = []

for i in range(len(lists)):
    grades.append(lists[i].split(","))

之后
grades = [x.strip() for x in files.readlines()]

(上面是一个list comprehension


最后,您可以直接在列表上循环,而不是使用索引:

之前
for i in range(len(grades)):
    # do something with grades[i]

之后
for thisGrade in grades:
    # do something with thisGrade

str.strip()返回一个删除了前导+尾随空白的字符串,.lstrip.rstrip分别只返回前导和尾随空白。

grades.append(lists[i].rstrip('\n').split(','))

实际上,你可以通过将整个文件作为一个长字符串读取到内存中,然后使用它们将其拆分为成绩列表,从而很好地利用换行符。

with open("grades.dat") as input:
    grades = [line.split(",") for line in input.read().splitlines()]
etc...

相关问题 更多 >