要件に関するいくつかの明確化に応じて、適切な解決策がある場合があります
「私のアイデアは、テキスト ファイルの各行をタブで区切って読み取るループを作成することでした。」
テキスト ファイルが既に検証済みであるか、エラー処理を無視する信頼性がある場合 (たとえば、単一のタブで均等に区切られていない場合)。
with open('dictionary.txt', 'r') as f:
[line.strip().split("\t")
for line in f.read().split("\n")
if line.strip()]
reを使用せずに、Wordオブジェクトインスタンスを作成するために必要な(包括的な)リストを取得します
"次に、以前に定義されたオブジェクトのインスタンスを作成しようとしました: Word."
with open('dictionary.txt', 'r') as f:
[Word(line.strip().split("\t"))
for line in f.read().split("\n")
if line.strip()]
「簡単に検索できるように、オブジェクトの名前をリストの 2 番目の項目に付けたい」
これを例で書き直してもらえますか?
しかし、それは私にこれをさせません。
line_list[1] = Word(line_list[0], line_list[1], line_list[2], line_list[3])
申し訳ありませんが、ここであなたを失いました.line_list[1]自体が引数である新しく作成されたWordインスタンスを参照するためにline_list[1]を使用するのはなぜですか?
あなたの明確化により、私はこのリワークされたコードのようなものになり
ます:
from pprint import pprint
あなたのクラス定義に関する私の仮定:
class Word():
def __init__(self, **kwargs):
self.set_attrs(**kwargs)
def __call__(self):
return self.get_attr("swedish_word")
def set_attrs(self, **kwargs):
for k, v in kwargs.iteritems():
setattr(self, k, v)
def get_attr(self, attr):
return getattr(self, attr)
def get_attrs(self):
return ({attr.upper():getattr(self, attr) for attr in self.__dict__.keys()})
def print_attrs(self):
pprint(self.get_attrs())
if __name__ == '__main__':
# sample entries in dictionary.txt
# swedish_word english_word article word_type
# hund dog ett noun
# katt cat ett noun
# sova sleep ett verb
with open('dictionary.txt', 'r') as f:
header = f.readline().strip().split("\t")
instances = [Word(**dict(zip(header, line.strip().split("\t"))))
for line in f.read().split("\n")
if line.strip()]
# for line in f.read().split("\n"):
# data = dict(zip(header, line.strip().split("\t")))
# w = Word(**data)
このように、特定の swedish_word のインスタンス プロパティを取得できます。
def print_swedish_word_properties(swedish_word):
for instance in instances:
if instance() == swedish_word:
print "Properties for Swedish Word:", swedish_word
instance.print_attrs()
print_swedish_word_properties("hund")
このような出力を得る
Properties for Swedish Word: hund
{'ARTICLE': 'ett',
'ENGLISH_WORD': 'dog',
'SWEDISH_WORD': 'hund',
'WORD_TYPE': 'noun'}
または、他のクラスメソッドを使用して、さまざまな属性のインスタンスを検索できます