请向我解释下面评论的行:
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
lines = [line for line in file(filename)]
会将数据文件中的每一行存储到字符串数组中,请注意,数据由t
分隔,每一行都以n
结尾,就像所有for line in file
一样。
调用lines[0].strip().split('t')[1:]
意味着:从字符串列表中,lines
得到第一行(我认为它包含有关您的数据的信息,而不是实际数据(,strip()
将删除末尾的n
,split('t')
将信息分离到一个列表中,然后您将[1:]
(倒数第二个元素(存储在cols
中。
rows = []
正在创建一个列表来按行存储有关数据的信息,就像cols
是一个按列存储信息的列表一样。
由于我们已经解析了第一行lines[0]
中的信息,所以您希望处理其余的信息,因此在lines[1:]
上循环,之前[1:]
用于遍历第一行中的信息而现在用于遍历其余的行。
如前所述,p=line.strip().split('t')
将剥离您的n
行,并将其拆分到t
上,以存储您的所有行信息和数据。我假设p[0]
是您的逐行数据信息并存储在rows
列表中,而其余部分是存储在CCD22中的实际数据(在您的情况下是整数(,data
是一个数组(浮点列表列表(。
即使您的数据都是整数,for line in file
也会将其读取为string
。float()
用于存储数据,以便以后在需要时用于数学运算。
最后,如果你的文件看起来像这样:
某个名称1名称2名称3。。。
条件1数据1.1数据1.2数据1.3…
条件2数据2.1数据2.2数据2.3…
条件3数据3.1数据3.2数据3.3…
您的输出:
cols = ['name1', 'name2', 'name3', ...]
rows = ['condition1', 'condition2', 'condition3', ...]
data = [[data1.1, data1.2, data1.3, ...], [data2.1, data2.2, data2.3, ...], [data3.1, data3.2, data3.3, ...], ...]