我正在将学生姓名字典保存为键和成绩列表作为值。我试图将值写入文件。目前我正把它们写成字符串。
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”分隔的键(空白)值。我想知道如何通过组合字符串和列表元素来写入文本文件。
答案 0 :(得分:1)
如果您可以控制写入数据,我建议使用完善的格式,例如JSON或INI。这将允许您分别使用公共库,例如json或ConfigParser模块。
答案 1 :(得分:1)
答案 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