我刚开始用Python学习课程,我遇到了问题。
我有以下行的txt文件:
3 37.5 200
6 36.9 200
9 36.6 100
12 36.6 0
当我运行下面的代码时,它只打印第一行。但是,我想检索所有的行。我知道您可以使用print()
,但是可以返回吗?
class Meds:
def __init__(self, file):
self.file = file
def meds(self):
for i in source.readlines():
data_split = i.strip().split(' ')
hour = data_split[0]
temp = data_split[1]
dose = data_split[2]
return 'At {0}:00 - he had {1} temp, and took {2} mg of meds'.format(hour, temp, dose)
if __name__ == '__main__':
source = open('meds.txt', 'r', encoding='utf8')
a = Meds(source)
print(a.meds())
source.close()
我非常感谢您的帮助,如果您能提供良好的,清晰的来源解释Python中的类,我将非常高兴。
答案 0 :(得分:1)
readlines()
返回文件中的所有行。您想要使用readline()
。
您似乎在迭代source
而不是self.file
。您从meds()
方法返回,也只循环一行。您也可以直接在文件对象上循环。考虑到这一点,您的循环函数可能如下所示:
for line in self.file:
data_split = i.strip().split(' ')
hour = data_split[0]
temp = data_split[1]
dose = data_split[2]
yield 'At {0}:00 - he had {1} temp, and took {2} mg of meds'.format(hour, temp, dose)
在调用meds()
的代码中,您可以使用以下内容:
for med in a.meds():
print(med)
如需进一步阅读,请参阅文档here。
答案 1 :(得分:1)
您的Meds
课程有两种方法,一种是__init__
,另一种是meds
。
所以不是一个类,而是一个伪装的函数。
并非每个编程问题都可以而且应该通过编写类来解决。
def meds(path):
with open(path) as medsfile:
data = [tuple(float(k) for k in ln.split())
for ln in medsfile if len(ln.strip()) > 0]
return data
在输入数据上运行此命令会返回元组列表:
In [4]: meds('meds.txt')
Out[4]: [(3.0, 37.5, 200.0), (6.0, 36.9, 200.0), (9.0, 36.6, 100.0), (12.0, 36.6, 0.0)]
答案 2 :(得分:0)