Python - 从txt文件访问数据

时间:2017-09-30 21:29:18

标签: python file text

我的目标是让一个程序请求输入测试平均值并将它们写入txt文件,第二个程序使用循环读取并处理第一个程序中的tests.txt文件到两列表格显示测试名称和分数精确到小数点后一位。

读取txt文件的第二个程序是什么样的?

这是第一个程序的代码:

def main():
    outfile =open('test.txt', 'w')
    print('Entering six tests and scores')
    num1 = float(input('Enter % score on this test '))
    num2 = float(input('Enter % score on this test '))
    num3 = float(input('Enter % score on this test '))
    num4 = float(input('Enter % score on this test '))
    num5 = float(input('Enter % score on this test '))
    num6 = float(input('Enter % score on this test '))

    outfile.write(str(num1) + '\n')
    outfile.write(str(num2) + '\n')
    outfile.write(str(num3) + '\n')
    outfile.write(str(num4) + '\n')
    outfile.write(str(num5) + '\n')
    outfile.write(str(num6) + '\n')
    outfile.close()
main()

我的第二个项目:

def main():
    infile = open('test.txt' , 'r')
    line1 = infile.readline()
    line2 = infile.readline()
    line3 = infile.readline()
    line4 = infile.readline()
    line5 = infile.readline()
    line6 = infile.readline()
    infile.close()
    line1 = line1.rstrip('\n')
    line2 = line2.rstrip('\n')
    line3 = line3.rstrip('\n')
    line4 = line4.rstrip('\n')
    line5 = line5.rstrip('\n')
    line6 = line6.rstrip('\n')
    infile.close()
main()

1 个答案:

答案 0 :(得分:2)

首先,绝对没有必要像这样重复自己 - 一个简单的循环将使您免于编写这样的重复代码。不过,您可能需要考虑使用字典,因为这是一种适用于这种情况的首选数据结构,您需要将键(名称)映射到值(分数)。此外,您可能需要考虑使用with语句作为上下文管理器,因为它会在嵌套代码块之后自动为您关闭文件。

因此,考虑到所有这些因素,以下几行应该可以解决问题:

def first():

    print('Entering six tests and scores')

    my_tests = {}

    for i in range(6):
        name, score = input('Enter name and score, separated by a comma: ').split(',')
        my_tests[name] = round(float(score), 1)

    with open('tests.txt', 'w') as f:
        for name, score in my_tests.items():
            f.write('{} {}\n'.format(name, score))

......当涉及问题的第二部分时:

def second():

    with open('tests.txt', 'r') as f:
        tests = f.readlines()

        for row in tests:
            test = row.rstrip('\n').split()
            print('{}\t{}'.format(test[0], test[1]))