从文件/列表中隔离参数

时间:2012-11-04 04:06:25

标签: python file list

我正在尝试编写一个函数,打开一个包含名称,城市和数字列表的文件,并按城市平均数字。

到目前为止,我有类似的事情:

numbers = 0
count = 0
n = 0
while n < len(file):
    for item in file:
        if item.split(' ')[-2] == city:
            count += 1
            numbers += float(item.split(' ')[-1])
            n += 1
        else:
            n += 1
    return numbers / count

如果[-2]是城市的位置,[ - 1]是数字的位置。假设文件已经打开。

我的代码遍历整个文件,只返回最后一行的内容。因此,如果文件中的最后一行有来自伦敦的人,而我正试图在伦敦进行平均,那么它只会给我一个数字;如果我试图对其他城市进行平均,那么它将不会返回任何内容。

为什么它在没有更新我的计数的情况下遍历整个文件,我该如何修复它?

编辑:

编辑代码,文件如下:

NAME1     COUNTRY     CITY     NUMBER
每行

1 个答案:

答案 0 :(得分:1)

首先,item.split('')产生如下内容:

['foo', '', '', '', '', 'spam', '', 'foo', '', '666'] 

如果你有多个空格。使用item.split()

其次,文件对象具有迭代接口,因此可以迭代 文件行这样:

for line in open('city.dat'):
    data = line.split()
    if data[-2] == 'CITYNAME':
       count += 1
       numbers += float(data[-1])

第三,确保文件中存在'CITYNAME'

为了防止不必要的文件和分割读数,最好将准备好的数据存储在内存中:

data = map(lambda x: x.split(), open('city.dat'))

并根据需要对其进行过滤:

filtered_cities = filter(lambda x: x[-2] == 'CITYNAME', data)