(另一个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'
的不支持的操作数类型答案 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