使用字符串更改列表名称

时间:2012-10-30 13:06:09

标签: python global-variables

(另一个begynner问题)

我需要从几个txt文件中提取多个列表(每个文件中有两个列表)。 我创建了一个函数来提取我需要的值,但我不知道如何命名列表,以便它们包含原始文件的名称。例如:

文件名+ '' +测量 文件名+ '' +日期

第一个问题是这些名称是字符串,我不知道如何将它们转换为列表名称。

第二个问题是,在函数中执行名称不是全局的,我以后无法访问列表。如果我在变量名称前写全局,我会收到错误。

def open_catch_down ():

    file = raw_input('Give the name of the file:')

    infile = open(file,'r')
    lines = infile.readlines()
    infile.close()

    global dates
    global values
    dates = []
    values = []


    import datetime

    for line in lines[1:]:
        words = line.split()
        year = int(words[0])
        month = int(words[1])
        day = int(words[2])
        hour = int(words[3])
        minute = int(words[4])
        second = int(words[5])
        date = datetime.datetime(year,month,day,hour,minute,second)
        dates.append(date)
        value = float(words[6])
        values.append(value)  

    vars()[file + '_' + 'values'] = values


open_catch_down ()

print vars()[file + '_' + 'values']

然后我收到错误:

print vars()[file + '_' + 'values']

TypeError:+:'type'和'str'

的不支持的操作数类型

1 个答案:

答案 0 :(得分:1)

首先,你对vars的使用是错误的,没有参数它只会返回不可写的locals dict。您可以改为使用globals

现在异常...... file变量不在print语句的范围内:

def open_catch_down():
    file = raw_input(...) #this variable is local to the function
    [...]

print file                #here, file references the built-in file type

由于file是用于文件处理的pythons内置类型的名称,因此print语句中的file引用此类,这会导致错误。如果您将变量命名为filename而不是file(您应该这样做,因为隐藏内置名称总是一个坏主意),您将获得UnboundLocalError。对于您的示例,最简单的解决方案是使您的函数返回文件名并将其保存在外部作用域中:

def open_catch_down():
    filename = raw_input(...) #your file name

    #... rest of the code

    return filename

filename = open_catch_down()
print filename