0

テキストファイルをサブセット付きの辞書に変換する関数を作成しようとしています。これまでにロードしたテキストドキュメントは、次のように表示されます。

101
102
103
201, John Cleese, 5/5/12, 5/7/12
202
203, Eric Idle, 7/5/12, 8/7/12
301
302
303

関数の結果は、ロードされた情報を取得し、それを次のように返す必要があります。

[('101', None), ('102', None), ('103', None),
('201', Guest(John Cleese, 05/05/12, 05/07/12)), ('202', None),
('203', Guest(Eric Idle, 07/05/12, 08/07/12)), ('301', None),
('302', None), ('303', None)]

私はisdigitを試してきましたが、役に立ちませんでした。私はなんとか最後の部屋(303)をほぼ機能させることができました。

def load_rooms(self, filename):
    fd = open(filename, 'rU')
    self._rooms = {}
    for i in fd:
        i = i.rstrip()
        print i

    if i.isdigit():
        self._rooms[i] = None
        print self._rooms
    else:
        print i

ディスプレイ

101
102
103
201, John Cleese, 5/5/12, 5/7/12
202
203, Eric Idle, 7/5/12, 8/7/12
301
302
303
{'303': None}

ああ、すごい、303号室が2回表示されていることに気づきました...私の質問は、テキストファイルの読み込みにどのようにアプローチするかということです。すべてのコードがフォーマットされていることを確認する必要がありますか、それともサブセットを含む辞書に変換する関数を作成するだけですか?私は辞書に慣れていないので、少し助けていただければ幸いです。ありがとう

4

2 に答える 2

1
import re

class Guest(object):
  ...

data = []
with open('data.txt') as f:
  for line in f:
    tok = re.split(r'\s*,\s*', line.strip())
    if len(tok) > 1:
      guest = Guest(tok[1], tok[2], tok[3])
    else:
      guest = None
    data.append((tok[0], guest))

print(data)

クラスの実装はGuest、読者の演習として残されています。

于 2012-05-15T12:39:07.063 に答える
0

reモジュールが必要かどうかわかりません

これを試して

def load_file( filename ):
    text = open( "data.txt" ).readlines()
    rooms = {}
    for line in text:
        room_data = line.strip( '\n' ).split( ',' )
        if len( room_data ) > 1:
            #rooms[room_data[0]] = room_data[1:]
            rooms[room_data[0]] = tuple( room_data[1:] )
        else:
            rooms[room_data[0]] = None

    return rooms 

タイトルに辞書について言及していますが、予想される結果はネストされたリストです。

編集

答えた?

于 2012-05-15T15:39:03.977 に答える