簡體   English   中英

PYTHON readlines()-無法訪問較大列表中的列表

[英]PYTHON readlines()-cannot access lists within a bigger list

我目前正在為學校做一個項目,其中涉及制作圖形編輯器。 我必須保存並重新打開文件。 我可以打開文件,但必須對其進行遍歷並重新記錄保存的所有內容。 但是我不確定實際上要遍歷文件,因為在打印打開的文件時,我會得到一個巨大的列表,其中包含我的所有列表,如下所示:

["['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循環將字符串中的數據保存到列表中,並且我已經在網上搜索了數小時,以找到某種解釋,但我找不到任何解釋。

您提供的實際上是一個列表,其中包含一個由長字符串組成的項目。 您能否提供用於生成此代碼的代碼?

如果它實際上是列表中的列表,則可以在另一個for循環中使用for循環來訪問每個列表中的每個項目。

假設您的清單是物件l。

l [0] = ['矩形',5.168961201501877,8.210262828535669,7.6720901126408005,6.795994993742178,'紅色']

並且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)在編輯器中創建一些幾何

2)將所有幾何序列化為文件

以后(在程序重新啟動並且所有舊的內存內容都消失之后:

3)從文件加載幾何

4)重新創建程序中的內容(幾何)

在第2步中,您做了一些事情,並且對此感到驚訝。 我的建議是使用其他一些序列化選項。 Python提供了許多功能,例如

  • pickle-快速簡便,但不能與Python程序互操作
  • JSON-很簡單,但可能需要一些編碼才能序列化和加載自定義對象

使用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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM