Python:写入文件并将其读回

时间:2014-02-08 20:07:50

标签: python python-2.7 file-io

我正在将学生姓名字典保存为键和成绩列表作为值。我试图将值写入文件。目前我正把它们写成字符串。

def save_records(students, filename):
    #saves student records to a file
    out_file = open(filename, "w")
    for x in students.keys():
        out_file.write(x + " " + str(students[x]) + "\n")
    out_file.close()

保存文件后,我尝试将其读回。读出的相关部分如下。

while True:
    in_line = in_file.readline()
    if not in_line:
        break
    #deletes line read in
    in_line = in_line[:-1]
    #initialize grades list
    in_line = in_line.split()
    name = in_line[0]
    students[name] = map(int, in_line[1:])

读出的代码适用于预格式化的普通文本文件。文本文件的格式是:由空格“\ n”分隔的键(空白)值。我想知道如何通过组合字符串和列表元素来写入文本文件。

4 个答案:

答案 0 :(得分:1)

如果您可以控制写入数据,我建议使用完善的格式,例如JSON或INI。这将允许您分别使用公共库,例如jsonConfigParser模块。

答案 1 :(得分:1)

使用类似dicts

等内容的pythons pickle之类的东西会不会更容易

...然后将输出打印到一个单独的文件?

如果不知道你打算如何使用它,很难说...

答案 2 :(得分:1)

students[name] = map(int, in_line[1:])开始,我假设您要打印列表student[x]的项目,其中包含空格。

您可以使用str.join方法

' '.join(map(str,students[x]))

答案 3 :(得分:0)

您可能需要考虑使用逗号分隔值文件(也称为csv文件)而不是纯文本文件,因为它们提供了一种更加结构化的方式来读取和写入数据。编写完成后,您可以在Excel等电子表格程序中打开它们,以查看和编辑其内容。

重写函数以使用csv文件,并假设您使用的是Python 2.x,我们得到类似的结果:

import csv

def save_records(students, filename):
    # note that csv files are binary so on Windows you
    # must write in 'wb' mode; also note the use of `with`
    # which ensures the file is closed once the block is 
    # exited.
    with open(filename, 'wb') as f:
        # create a csv.writer object
        csv_out = csv.writer(f)
        for name, grades in students.iteritems():
           # write a single data row to the file
           csv_out.writerow([name]+grades)

def read_records(filename):
    students = dict()
    # note that we must use 'rb' to read in binary mode
    with open(filename, 'rb') as f:
        # create a csv.reader object
        csv_in = csv.reader(f)
        for line in csv_in:
            # name will have type `str`
            name = line[0]
            grades = [int(x) for x in line[1:]]
            # update the `students` dictionary
            students[name] = grades
    return students