请向我解释以下评论:
def readfile(filename):
lines = [line for line in file(filename)]
cols = lines[0].strip().split('\t')[1:] #why [1:] here? what is it doing?
rows = [] #whats the difference between rows = [] and rows = {}
data=[]
for line in lines[1:]: #what lines[1:] is doing?
p=line.strip().split('\t')
rows.append(p[0])
#why we used float below if my file contains only integer numbers?
data.append([float(x) for x in p[1:]])
return rows,cols,data
答案 0 :(得分:0)
lines = [line for line in file(filename)]
会将数据文件中的每一行存储到一个字符串数组中,请注意,您的数据用\t
分隔,并且每一行都以\n
结尾,而所有{{1} }。
调用for line in file
的意思是:从字符串列表lines[0].strip().split('\t')[1:]
中获得第一行(我认为其中包含有关您的数据的信息,而不是实际数据)lines
将删除{{1} },最后strip()
会将信息分成一个列表,然后在其中将\n
(倒数第二个元素)存储在split('\t')
内。
[1:]
正在创建一个列表,以按行存储有关您的数据的信息,就像cols
是一个列的按行存储信息的列表。
由于我们已经解析了第一行rows = []
中的信息,因此您要处理其余部分,因此在cols
用于浏览第一行中的信息之前,请遍历lines[0]
现在遍历其余行。
lines[1:]
将剥离[1:]
行,并在p=line.strip().split('\t')
上拆分以存储所有行信息和数据。 \n
我假设是您的数据的行信息并存储在\t
列表中,而其余部分是存储在p[0]
中的实际数据(在您的情况下为整数),rows
是一个数组(列表列表)。
即使您的数据全部为整数,data
也会将其读取为for line in file
。 string
用于将数据存储为以后可用于数学运算的内容。
最后,如果您的文件如下所示:
名称1名称2名称3 ...
condition1 data1.1 data1.2 data1.3 ...
condition2 data2.1 data2.2 data2.3 ...
condition3 data3.1 data3.2 data3.3 ...
您的输出:
float()