Skip to main content
 首页 » 编程设计

python之从文件/列表中分离参数

2025年05月04日9zhenyulu

我正在尝试编写一个函数来打开一个包含姓名、城市和数字列表的文件,并按城市取这些数字的平均值。

到目前为止,我有类似的东西:

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 

在每一行。

请您参考如下方法:

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

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

如果一行中有多个空格。使用 item.split()

其次,文件对象有迭代接口(interface),所以可以迭代 这样的文件行:

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)