根据对您的要求的一些澄清,您可能有一个合适的解决方案
“我的想法是创建一个循环来读取文本文件的每一行,用制表符分隔,并且”
如果文本文件已经预先验证或可靠忽略错误处理(例如,没有被单个选项卡均匀分隔)。
with open('dictionary.txt', 'r') as f:
[line.strip().split("\t")
for line in f.read().split("\n")
if line.strip()]
将为您提供创建 Word 对象实例所需的(综合)列表,而无需使用 re
“然后尝试创建一个先前定义的对象的实例:Word。”
with open('dictionary.txt', 'r') as f:
[Word(line.strip().split("\t"))
for line in f.read().split("\n")
if line.strip()]
“我希望该对象的名称在列表中的第二项,以便于搜索,”
你能用一个例子重写这个吗?
但它不允许我这样做,
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'}
或者您可以使用任何其他类方法来搜索各种属性的实例