使用追加功能创建列表列表

时间:2015-04-15 08:17:53

标签: python

我有两个我创建的函数,如下所示

def load_dates(stations):     
    f = open(stations[0] + '.txt', 'r')

    dates = []
    for line in f:
        dates.append(line.split()[0])
    f.close()
    return dates


stations = load_stations("stations.txt")
dates = load_dates(stations)

def load_station_data(station):

    f = open(stations[0] + '.txt', 'r')
    temp = []
    for line in f:
        x = (line.split()[1])
        x = x.strip()
        temp.append(x)
    f.close()
    return temp

第一个函数从单独文件中的列表中检索日期(因此是openfile函数),可以看作是第一列,第二个函数在消除空格的同时检索温度。然而,第二个功能是从特定文件(站)获取温度。

Dates       Temp

19600101    29.2
19600102    29.4
19600103    29.5

我现在的问题是如何使我的新功能在不同的站文件的相应列表中显示临时数据列表

例如,有一个属于每个站(城市)的温度列表。我知道我要做的是创建一个空列表,使用for循环继续遍历站点,然后添加我遍历的内容 使用append函数的空列表。我是python的新手,所以我正在努力解决上面提到的部分

3 个答案:

答案 0 :(得分:2)

不要使用列表,最好在这里使用字典。

#" = {}" create a dictionnary
cities = {}
#put the files you want to parse in this list
file_list = ("city1.txt", "city2.txt")
for file_name in file_list:
    file = open(file_name, 'r')
    #we don't want the .txt in the name, so we'll cut it
    #split splits the file_name into a list, removing all dots
    city_name = file_name.split('.')[0]
    #"= []" create an empty list
    cities[city_name] = []
    for line in file:
        #strip will remove all unnecessary spaces
        values = line.strip().strip(' ')
        #verify the length, we don't want to use empty lines
        if len(values) == 2:
            cities[city_name] = values[1]
    file.close()

我希望这会做你想做的事情

编辑: 所有城市和价值观现在都在词典“城市”中,如果你想要访问特定城市的临时城市,你可以这样做

print(cities["cityname"])

如果你想阅读所有数据,你可以打印整个字典

for key, temperatures in cities.iteritems():
    print("City: " + key)
    for temperature in temperatures:
        print("\t" + temperature)

答案 1 :(得分:2)

同意@Morb说dict听起来更合理但是在回答你原来的问题时你肯定可以在列表中附加一个列表(而不是扩展)所以,你的文件中的每一行都是这样的:

19600101 29.2 28.4 25.6 30.2
19600102 26.2 24.4 21.6 30.5

你可以

temp.append(line.split()[1:])

并以列表列表结束

[[' 29.2',' 28.4',' 25.6',' 30.2'],[&#39 ; 26.2',' 24.4',' 21.6',' 30.5']

答案 2 :(得分:0)

我不确定我是否也遇到了问题,但也许你应该:

  • 只需一个循环来获取温度和日期:

    def load_all_data(stations):
        f = open(stations[0] + '.txt')
        dates, temps = [], []
        for line in f.readlines():
            dates.append(line.split()[0])
            temps.append(line.split()[1].strip())
        f.close()
        return dates, temps
    
  • 使用列表理解:

    def load_all_data(stations):
        f = open(stations[0] + '.txt'):
        dates = [line.split()[0] for line in f.readlines()]
        temps = [line.split()[1].split() for line in f.readlines()]
    f.close()
    return dates, temps
    
  • 按照cool_jesus的建议使用上下文管理器进行打开:

    def load_data_all(stations):
        with open(stations[0] + '.txt') as f:
            dates = [line.split()[0] for line in f.readlines()]
            temps = [line.split()[1].split() for line in f.readlines()]
        return dates, temps
    
  • 在电台上进行循环播放:

    def load_data_all(stations):
        data_stations = [] 
        for station in stations:
            with open(station + '.txt') as f:
                dates = [line.split()[0] for line in f.readlines()]
                temps = [line.split()[1].split() for line in f.readlines()]
                data_stations.append((temps, dates))
        return data_stations