0

grocery_stock.txtには

レモネード61.1

パン341.43

チップ473.76

バナナ160.79

ピザ155.0

これは私がこれまでに書いたコードです。

    infile=open("grocery_stock.txt", 'r+')
    lines=infile.readlines()
    line=infile.readline()
    none= ' '
    count = 0
    index= 0
    while line !=none:
        line1=infile.readline()

        while line1 in lines:

            line1=line1.split()
            name1=str(line1[:0])
            quant1=(str(line1[:1]))
            price1=[(str(line1[:2]))]
            grocerystock[name1[0]]=(quant1,name1)

            print (grocerystock)

        line2=infile.readline()
        for line2 in line:
            line1=line2.split()
            name1=str(line1[0])
            quant1=(str(line1[1]))
            price1=[(str(line1[2]))]
            grocerystock[name1[1]]=(quant1,name1)
            print (line1[1], line[2],line1[0])
            print (grocerystock)

        line3=infile.readline()
        line4=infile.readline()
        line5=infile.readline()
    infile.close()

    grocerystock={} 

これを行う理由は、プロジェクトの後半でいくつかのキーを削除していくつかの値を変更する必要があるため、ファイルを読み取ってデータを辞書に変換するときにプログラムのどこからでも呼び出すことができる関数が必要だからです。

私のループはあなたには気が狂っているように見えるかもしれませんが、私は頭に浮かんだものを何でも試していたところです。

また、line5を完了していないことがわかるように、ランダムループを入力して何が起こるかを確認するよりも、正しいループを見つけたほうがよいと思いました。

前もって感謝します。

4

4 に答える 4

0

おそらくこれは役立つでしょう:

with file('grocery_stock.txt') as f:
    lines = f.readlines()

# filter out empty lines
lines = [line for line in lines if line.strip() != '']

# split all lines
lines = [line.split() for line in lines]

# convert to a dictionary
grocerystock = dict((a, (b, c)) for a, b, c in lines)

# print
for k, v in grocerystock.items():
    print k, v
于 2012-04-16T22:13:40.083 に答える
0

必要なループは、データを1行ずつ移動するためのループだけです。これはこれで達成できます:

with open("grocery_stock.txt", "r+") as f:
    for line in f: # Changed to be a more elegant solution; no need to use while here.
        # Here we would split (hint) the line of text.
        dict[split_text[0]] = [split_text[1], split_text[2]]

宿題なので、このソリューションだけでなく他のソリューションも検討することをお勧めします。私はあなたに答えを与えることはできません、今私はできますか?

于 2012-04-16T22:14:05.107 に答える
0

これはHWなので、いくつかのヒント:

  • コンテキストマネージャーを使用してファイルを開くようにしてください。つまり、ステートメントです。with
  • が間違っていなくてもwhile、この場合はforループを使用することをお勧めします(反復回数は固定されています-行数)–whileループを停止問題へのゲートウェイと考えることがあります...
  • readlines()行数がおそらく少ないので、を使用してみてください。または、次のようなものを使用します(これは自然に見えます):

    for line in f:
        # do something with line
    
于 2012-04-16T22:15:13.037 に答える
0

を使用open()してファイルオブジェクトを取得すると、ファイルオブジェクトを反復処理できます。そのようです:

for line in f:
    # do something with the line

f.readline()ループで呼び出すのではなく、上記をお勧めします。

f.readlines()ファイル全体をメモリに読み込み、入力行のリストを作成します。非常に大きなファイルの場合、これによりパフォーマンスの問題が発生する可能性があります。ここで使用しているような小さなファイルの場合は機能しますが、標準のPythonイディオムを習得すれば、小さなファイルにも大きなファイルにも使用できます。

于 2012-04-16T22:22:14.937 に答える