-2

(另一个初学者问题)

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

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

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

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

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']

类型错误:+ 不支持的操作数类型:'type' 和 'str'

4

1 回答 1

1

首先,您的使用vars是错误的,没有参数它只会返回locals不可写的字典。你可以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内置类型的名称,fileprint语句中引用了这个类,这导致了错误。如果你命名变量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
于 2012-10-30T13:37:17.547 回答