如何从文本文件中输入信息进行打印?
How do I input information from a text file to print?
我必须制作一个动物 class 允许用户输入信息并根据该信息打印出一些文本。
class Animal:
def __init__(self,species='default',language='default',age=0):
self.species=species
self.language=language
self.age=age
def setSpecies(self, species):
#set animal species
self.species=species
def setLanguage(self, language):
#set animal language
self.language=language
def setAge(self, age):
#set animal age
self.age=age
def speak(self):
#prints a sentance by the animal
print('I am a {} year old {} and I {}.'.format(self.age, self.species, self.language))
def __repr__(self):
#return string representation
return "Animal,'{}','{}',{}".format(self.species,self.language,self.age)
def __eq__(self, new):
#compares animals
return self.species==new.species and self.language==new.language and self.age==new.age
现在我必须编写一个函数 processAnimals(),它接受一个参数,即输入文件的名称。函数 returns 创建的动物列表,如果文件不包含任何行,则为空列表。
processAnimals() 函数应该读取文件中的所有行,为每一行创建一个 Animal 对象并将该对象放入列表中。
def processAnimals(fname):
with open(fname,'r') as f:
for line in f:
line = fname.strip().split(',')
print('I am a {} year old {} and i {}.').format(self.species,self.language,self.age)
我收到此错误:AttributeError: 'NoneType' object has no attribute 'format'
当我删除 .format(self.species,self.language,self.age)
时,它会打印
I am a {} year old {} and i {}.
I am a {} year old {} and i {}.
I am a {} year old {} and i {}.
这是我需要的,但是 {}
应该有来自文件
的信息
文本文件:
cat,meow,8
dog,bark,22
bat,use sonar,2
我想我的问题可能出在文件的读取上,但我不太确定。
这里有几个问题:
您正在使用 for line in f
迭代打开的文件 fname
。然后您立即执行 line = fname.strip().split(',')
,它根据 fname
- 文件名重新定义 line
。您要拆分 line
,而不是 fname
。
您正在做 print('something').format(else)
。您正在 print()
对象上调用 format
方法。 print()
函数returns什么都没有,所以调用format
就相当于None.format()
,显然是行不通的。你想在字符串上调用 format
,而不是 print
函数。所以 print('something'.format(else))
而不是 print('something').format(else)
您正在 processAnimals
中使用 self.species, self.language, self.age
。除非 processAnimals
是 Animals
的 class 方法,我猜它不是,因为它唯一的参数是 fname
,没有 self
调用方法的对象。在调用方法之前,您需要为每一行实例化 Animals
class。
你可以这样做:
def processAnimals(fname):
with open(fname, 'r') as f:
for line in f:
new_animal = Animal(*(line.strip().split(',')))
print('I am a {} year old {} and i {}.'.format(new_animal.species, new_animal.language, new_animal.age))
我必须制作一个动物 class 允许用户输入信息并根据该信息打印出一些文本。
class Animal:
def __init__(self,species='default',language='default',age=0):
self.species=species
self.language=language
self.age=age
def setSpecies(self, species):
#set animal species
self.species=species
def setLanguage(self, language):
#set animal language
self.language=language
def setAge(self, age):
#set animal age
self.age=age
def speak(self):
#prints a sentance by the animal
print('I am a {} year old {} and I {}.'.format(self.age, self.species, self.language))
def __repr__(self):
#return string representation
return "Animal,'{}','{}',{}".format(self.species,self.language,self.age)
def __eq__(self, new):
#compares animals
return self.species==new.species and self.language==new.language and self.age==new.age
现在我必须编写一个函数 processAnimals(),它接受一个参数,即输入文件的名称。函数 returns 创建的动物列表,如果文件不包含任何行,则为空列表。 processAnimals() 函数应该读取文件中的所有行,为每一行创建一个 Animal 对象并将该对象放入列表中。
def processAnimals(fname):
with open(fname,'r') as f:
for line in f:
line = fname.strip().split(',')
print('I am a {} year old {} and i {}.').format(self.species,self.language,self.age)
我收到此错误:AttributeError: 'NoneType' object has no attribute 'format'
当我删除 .format(self.species,self.language,self.age)
时,它会打印
I am a {} year old {} and i {}.
I am a {} year old {} and i {}.
I am a {} year old {} and i {}.
这是我需要的,但是 {}
应该有来自文件
文本文件:
cat,meow,8
dog,bark,22
bat,use sonar,2
我想我的问题可能出在文件的读取上,但我不太确定。
这里有几个问题:
您正在使用
for line in f
迭代打开的文件fname
。然后您立即执行line = fname.strip().split(',')
,它根据fname
- 文件名重新定义line
。您要拆分line
,而不是fname
。您正在做
print('something').format(else)
。您正在print()
对象上调用format
方法。print()
函数returns什么都没有,所以调用format
就相当于None.format()
,显然是行不通的。你想在字符串上调用format
,而不是print
函数。所以print('something'.format(else))
而不是print('something').format(else)
您正在
processAnimals
中使用self.species, self.language, self.age
。除非processAnimals
是Animals
的 class 方法,我猜它不是,因为它唯一的参数是fname
,没有self
调用方法的对象。在调用方法之前,您需要为每一行实例化Animals
class。
你可以这样做:
def processAnimals(fname):
with open(fname, 'r') as f:
for line in f:
new_animal = Animal(*(line.strip().split(',')))
print('I am a {} year old {} and i {}.'.format(new_animal.species, new_animal.language, new_animal.age))