我目前正在为学校做一个涉及制作图形编辑器的项目。我在一个必须能够保存并重新打开文件的部分。我可以打开文件,但我必须遍历它并重新保存我保存的所有内容。然而,我不确定实际遍历文件,因为当打印我打开的文件时,我得到一个巨大的列表,其中包含我的所有列表:
["['Rectangle', 5.168961201501877, 8.210262828535669, 7.6720901126408005, 6.795994993742178, 'red']['Line', 5.782227784730914, 5.269086357947434, 8.69837296620776, 4.993742177722153, 'red']['Circle', 2.6491232154288933, -0.8552572601656006, 6.687547623119292, 3.1831671475247982, 'red']"]
我是使用本网站的新手,请耐心等待。
def open_file(self,cmd):
filename=input("What is the name of the file? ")
File= open(filename,'r')
file= File.readlines()
print(file)
我之前使用以下方法保存了文件:
file.write(str(l))其中l是我创建的值列表的名称
我尝试过使用split() 我尝试使用for循环将字符串中的数据保存到列表中 我在网上搜了几个小时才找到某种解释,但我找不到任何解释。
答案 0 :(得分:1)
您提供的实际上是一个列表,其中包含一个由长字符串组成的项目。您能提供用于生成此代码的代码吗?
如果它实际上是列表中的列表,则可以在另一个for循环中使用for循环来访问每个列表中的每个项目。
假设您的列表是对象l。
l [0] = ['Rectangle',5.168961201501877,8.210262828535669,7.6720901126408005,6.795994993742178,'red']
和l [0] [0] ='矩形'
for i in l:
for x in i:
允许你遍历所有这些。
对于您提供的信息,readlines()不一定有效,因为没有任何内容可以描述文本中的新行。您可以使用for循环将列表中的每个项目保存为一行,而不是将列表另存为转换后的字符串
for lne in l:
f.write(lne)
这会将列表中的每个项目写入文件中的新行(取决于您的python版本,您可能必须使用f.write(lne +'\ n')来添加新行)。然后,当您打开文件并使用readlines()时,它会将每一行作为项目附加到列表中。
答案 1 :(得分:0)
您显然在阅读之前创建的数据时遇到了问题。
您的任务似乎需要
1)在编辑器中创建一些几何体
2)将所有几何图形序列化为文件
以及稍后(重新启动程序并且所有旧内存内容都消失后:
3)从文件中加载几何
4)重新创建程序中的内容(几何)
在第2步中你做了一些事情,你似乎对此感到惊讶。我的建议是使用其他一些序列化选项。 Python提供了许多,例如
使用JSON序列化的示例解决方案可能如下所示:
import json
class Geometry():
def __init__(self, geotype="Geometry", color="blank", numbers=[]):
self.geotype = geotype
self.color = color
self.numbers = numbers
def to_list(self):
return [self.geotype, self.color, self.numbers]
def from_list(self, lst):
print "lst", lst
self.geotype, self.color, self.numbers = lst
return self
def __repr__(self):
return "<{self.geotype}: {self.color}, {self.numbers}>".format(self=self)
def test_create_save_load_recreate():
geoms = []
rect = Geometry("Rectange", "red", [12.34, 45])
geoms.append(rect)
line = Geometry("Line", "blue", [12.33, 11.33, 55.22, 22,41])
geoms.append(line)
# now serialize
fname = "geom.data"
with open(fname, "w") as f:
geoms_lst = [geo.to_list() for geo in geoms]
json.dump(geoms_lst, f)
# "geom.data are closed noe
del f
del geoms
del rect
del line
# after a while
with open(fname, "r") as f:
data = json.load(f)
geoms = [Geometry().from_list(itm) for itm in data]
print geoms