Infile是一个家谱:
holla 1755
ronaj 1781
asdflæj 1803
axle 1823
einar 1855
baelj 1881
æljlas 1903
jobbi 1923
gurri 1955
kolli 1981
Rounaj 2004
我想从infile打印出每一代人的时间,最后我想要平均值。在这里,我认为我的问题是,当infile结束时line2
超出范围:
def main():
infile = open('infile.txt', 'r')
line = infile.readline()
tmpstr = line.split('\t')
age=[]
while line !='':
line2 = infile.readline()
tmpstr2 = line2.split('\t')
age.append(int(tmpstr2[1]) - int(tmpstr[1]))
print age
tmpstr = tmpstr2
infile.close()
print sum(age)*1./len(age)
main()
所以我决定将所有信息都读到列表中,但tmpstr
在这里没有改变值:
def main():
infile = open('infile.txt', 'r')
line = infile.readline()
age=[]
while line !='':
tmpstr = line.split('\t')
age.append(tmpstr[1])
print age
infile.close()
print sum(age)*1./len(age)
main()
为什么?这两个脚本有什么问题?为什么我要写main()
两次?
有关这两者如何解决的任何想法?
Thanx all,这就是结果:
def main():
with open('infile.txt', 'r') as input:
ages = []
for line in input:
data = line.split()
age = int(data[1])
ages.append(age)
gentime = []
for i in xrange(len(ages)-1):
print ages[i+1] - ages[i]
gentime.append(ages[i+1] - ages[i])
print 'average gentime is', sum(gentime)*1./len(gentime)
main()
答案 0 :(得分:1)
您可以使用以下语句迭代文件的全部内容:
for line in infile:
# Perform the rest of your steps here
你不想使用while循环,除非你有一些计数器来切换索引位置(即你使用了infile.readlines()
并希望使用while循环)。
答案 1 :(得分:1)
在第二个实例中,您的代码只从文件中读取一行。
更简单,例如:
age = []
with open('data.txt', 'rt') as f:
for line in f:
vals = line.split('\t')
age.append(int(vals[1]))
print sum(age) / float(len(age))
产生
1878.54545455
答案 2 :(得分:1)
试试这个:
def main():
with open('infile.txt', 'r') as input:
ages, n = 0, 0
for line in input:
age = int(line.split()[1])
ages += age
n += 1
print age
print 'average:', float(ages) / n
一些意见:
split()
,这样当你的名字与空格或前面的数字分开时你就会正确处理输入。 em> tabs with
语法打开文件并确保之后关闭文件也是个好主意关于你问题的最后部分,“我为什么要写两次main()?”那是因为你第一次定义 main
函数,第二次调用它。
答案 3 :(得分:1)
您可以尝试这样的事情:
if __name__ == "__main__":
file = open("infile.txt", "r")
lines = file.readlines()
gens = [int(x.split('\t')[1]) for line in lines]
avg = sum(gens)/len(gens)
第一行是python进入程序的本机入口。它相当于C的“int main()”。
接下来,如果您将文件中的所有行都读入列表,则可能最容易设置列表推导。
第4行遍历文件行,在选项卡中拆分它们,只从新拆分列表中检索第2项(索引1)。
答案 4 :(得分:1)
这两个脚本的问题在于您的while
循环是无限的。除非第一行为空,否则条件line != ''
将永远不会为假。
你可以解决这个问题,但最好使用Python习惯用法:
lastyear = None
ages = []
for line in infile:
_name, year = line.split('\t')
year = int(year)
if lastyear:
ages.append(year - lastyear)
lastyear = year
print float(sum(ages))/len(ages)