1

私は現在、グラフエディタの作成を含む学校向けのプロジェクトを行っています。私は、ファイルを保存して再度開くことができる必要がある部分にいます。ファイルを開くことはできますが、ファイルを反復処理して、保存したものすべてを再グラフ化する必要があります。ただし、開いたファイルを印刷すると、次のようにすべてのリストを含む巨大なリストが表示されるため、実際にファイルを反復処理するかどうかはわかりません。

["['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 ループを使用して文字列内のデータをリストに保存しようとしましたが、Web を何時間も検索して何らかの説明を見つけましたが、何も見つかりませんでした。

4

2 に答える 2

1

あなたが提供したのは、実際には長い文字列で構成される 1 つの項目を持つリストです。これを生成するために使用しているコードを提供できますか?

実際にリスト内のリストである場合は、別の 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() を使用すると、各行がリストの項目として追加されます。

于 2014-04-25T00:38:24.877 に答える
0

以前に作成したデータの読み取りに問題があるようです。

あなたの仕事は必要なようです

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
于 2014-04-25T01:09:51.200 に答える