(另一个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''
首先,您对 vars
的使用是错误的,没有参数,它只是返回 locals
dict,哪些不写。您可以改用globals
。
现在您的例外... file
变量不在您的打印语句的范围中:
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内置类型的名称,即打印语句中的 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