1

具体的には、各エントリのキーがグループの最初の行になり、その後に関連する値が続き、次のキーの前に改行が続くように、複数の行が配置されたテキスト ファイルがあります。while ループを使用して readline でこれを達成するのに苦労しています。

たとえば、最初の行はレストラン名で、その後にレストラン名のキーの下にあるディクショナリの値に書き込む必要がある、そこで食事をした顧客の数行が続きます。

私はファイルの読み取りに本当に慣れていないので、私が持っているものがまったく役に立たないのではないかと心配しています。

このようなものだと思いますが、半機能的ではありません。

編集:私が明確にする必要があった応答をありがとう、対応するキーの各値項目は、キーの後の後続の行にリストされ、そのリストの最後に次のキーの前に空白行があります。残念ながら、ここでは readline アプローチを使用せざるを得ません。

    restaurants = {}
    patrons = []

    line = file.readline()
    s = line.strip('\n')

    while s != ''
    restaurant = s
    line = file.readline
    patrons.append(s)
4

2 に答える 2

6

テキストファイルが次のようになっていると仮定します

マクドナルド ビル・ボ・ボブ

通り

各エントリのキーがグループの最初の行になり、その後に関連する値が続き、その後に改行が続くように、複数の行が配置されたテキスト ファイルがあります。

my_dict = {}

with open("rest.txt", 'r') as f:
    for line in f:
        items = line.split()
        key, values = items[0], items[1:]
        my_dict[key] = values


print my_dict

生成する

{'mcdonalds': ['bill', 'bo', 'bob']}
于 2013-03-22T19:32:30.550 に答える
0

編集: 新しい問題の仕様に従って改訂されました。

with open("filename") as f:
    lines = f.readlines()
restaurants = {}
current_key = None
for line in lines:
    line = line.strip()
    if not line:
        current_key = None
    elif not current_key:
        current_key = line
        restaurants[current_key] = []
    else:
        restaurants[current_key].append(line)

あなたが言うように、readlines()何らかの理由で本当にここで使用できない場合は、ループをEOFまで一度に1行ずつ読み取るforループとして書き直してください。while

于 2013-03-22T19:28:37.603 に答える